Description
I want to use parametric constructor to configure tests for different cases instead of duplicating the code.
But
public abstract class ExportMetadataTests(
IMetadataExportService metadataExportService,
IFileWorkspaceService workspaceService,
string? extension = null)
: RevitModelSampleTest(workspaceService, extension)
{
[Test]
[MethodDataSource(nameof(DocumentPaths))]
public async Task Extract_ValidFamily_ReturnsMetadata(string path)
{
// Arrange
var document = Documents[path];
// Act
var metadata = metadataExportService.Export(document);
// Assert
using (Assert.Multiple())
{
...
}
}
[Test]
[MethodDataSource(nameof(DocumentPaths))]
public async Task Extract_FamilyDocument_ReturnsCurrentRevitVersion(string path)
{
// Arrange
var document = Documents[path];
// Act
var metadata = metadataExportService.Export(document);
// Assert
...
}
}
[InheritsTests]
[WorkerDependencyInjectionDataSource]
public sealed class ExportFamilyMetadataTests(IMetadataExportService metadataExportService, IFileWorkspaceService workspaceService)
: ExportMetadataTests(metadataExportService, workspaceService, extension: ".rfa");
[InheritsTests]
[WorkerDependencyInjectionDataSource]
public sealed class ExportProjectMetadataTests(IMetadataExportService metadataExportService, IFileWorkspaceService workspaceService)
: ExportMetadataTests(metadataExportService, workspaceService, extension: ".rvt");
InheritsTests tries to call Activator instead of using DI. without InheritsTests, tests with DependencyInjectionDataSource work fine
Expected Behavior
InheritsTests should use DependencyInjectionDataSourceAttribute instead of create a parameterless type
Actual Behavior
InheritsTests ignores DependencyInjectionDataSourceAttribute and uses Activator.CreateInstance
Steps to Reproduce
- Create a base class
- Inherit from it
- Add InheritsTests and DependencyInjectionDataSourceAttribute attributes
TUnit Version
1.49.0
.NET Version
.NET 10
Operating System
Linux
IDE / Test Runner
JetBrains Rider
Error Output / Stack Trace
[Test Failure] Cannot dynamically create an instance of type 'Kinship.Jarvis.Tests.ExportProjectMetadataTests'. Reason: No parameterless constructor d...
[Test Failure] Cannot dynamically create an instance of type 'Kinship.Jarvis.Tests.ExportProjectMetadataTests'. Reason: No parameterless constructor defined.
at System.RuntimeType.ActivatorCache..ctor(RuntimeType rt)
at System.RuntimeType.ActivatorCache.Create(RuntimeType type)
at System.RuntimeType.IGenericCacheEntry`1.CreateAndCache(RuntimeType type)
at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean wrapExceptions)
at TUnit.Core.MethodDataSourceAttribute.GetOrCreateInstanceAsync(DataGeneratorMetadata metadata, Type targetType)
at TUnit.Core.MethodDataSourceAttribute.GetDataRowsAsync(DataGeneratorMetadata dataGeneratorMetadata)+MoveNext()
at TUnit.Core.MethodDataSourceAttribute.GetDataRowsAsync(DataGeneratorMetadata dataGeneratorMetadata)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
at TUnit.Engine.Building.TestBuilder.GetInitializedDataRowsAsync(IDataSourceAttribute dataSource, DataGeneratorMetadata dataGeneratorMetadata, CancellationToken cancellationToken)+MoveNext()
at TUnit.Engine.Building.TestBuilder.GetInitializedDataRowsAsync(IDataSourceAttribute dataSource, DataGeneratorMetadata dataGeneratorMetadata, CancellationToken cancellationToken)+MoveNext()
at TUnit.Engine.Building.TestBuilder.GetInitializedDataRowsAsync(IDataSourceAttribute dataSource, DataGeneratorMetadata dataGeneratorMetadata, CancellationToken cancellationToken)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
at TUnit.Engine.Building.TestBuilder.BuildTestsFromMetadataAsync(TestMetadata metadata, TestBuildingContext buildingContext, CancellationToken cancellationToken)
at TUnit.Engine.Building.TestBuilder.BuildTestsFromMetadataAsync(TestMetadata metadata, TestBuildingContext buildingContext, CancellationToken cancellationToken)
at TUnit.Engine.Building.TestBuilder.BuildTestsFromMetadataAsync(TestMetadata metadata, TestBuildingContext buildingContext, CancellationToken cancellationToken)
Additional Context
No response
IDE-Specific Issue?
Description
I want to use parametric constructor to configure tests for different cases instead of duplicating the code.
But
InheritsTests tries to call Activator instead of using DI. without InheritsTests, tests with DependencyInjectionDataSource work fine
Expected Behavior
InheritsTests should use DependencyInjectionDataSourceAttribute instead of create a parameterless type
Actual Behavior
InheritsTests ignores DependencyInjectionDataSourceAttribute and uses Activator.CreateInstance
Steps to Reproduce
TUnit Version
1.49.0
.NET Version
.NET 10
Operating System
Linux
IDE / Test Runner
JetBrains Rider
Error Output / Stack Trace
Additional Context
No response
IDE-Specific Issue?
dotnet testordotnet run, not just in my IDE