From fbde4234d4554ff0a8953162ae4fb0fad8c5a961 Mon Sep 17 00:00:00 2001 From: Timothy Makkison Date: Wed, 21 Jan 2026 22:21:32 +0000 Subject: [PATCH] perf: reuse no data array and empty task --- TUnit.Core/Attributes/TestData/NoDataSource.cs | 3 ++- TUnit.Engine/Building/TestBuilder.cs | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/TUnit.Core/Attributes/TestData/NoDataSource.cs b/TUnit.Core/Attributes/TestData/NoDataSource.cs index d61c2de0ff..87052cb3bc 100644 --- a/TUnit.Core/Attributes/TestData/NoDataSource.cs +++ b/TUnit.Core/Attributes/TestData/NoDataSource.cs @@ -2,6 +2,7 @@ internal class NoDataSource : IDataSourceAttribute { + private static readonly Task _emptyRowTask = Task.FromResult([]); public static readonly NoDataSource Instance = new(); /// @@ -9,7 +10,7 @@ internal class NoDataSource : IDataSourceAttribute public async IAsyncEnumerable>> GetDataRowsAsync(DataGeneratorMetadata dataGeneratorMetadata) { - yield return () => Task.FromResult([]); + yield return static () => _emptyRowTask; await default(ValueTask); } } diff --git a/TUnit.Engine/Building/TestBuilder.cs b/TUnit.Engine/Building/TestBuilder.cs index 04ca0732b1..19daa42c95 100644 --- a/TUnit.Engine/Building/TestBuilder.cs +++ b/TUnit.Engine/Building/TestBuilder.cs @@ -812,11 +812,13 @@ private static Type[] TryInferClassGenericsFromDataSources(TestMetadata metadata return resolvedTypes; } + private static readonly IDataSourceAttribute[] _dataSourceArray = [NoDataSource.Instance]; + private async Task GetDataSourcesAsync(IDataSourceAttribute[] dataSources) { if (dataSources.Length == 0) { - return [NoDataSource.Instance]; + return _dataSourceArray; } // Inject properties into data sources during discovery (IAsyncInitializer deferred to execution)