xUnit中是否存在NUnit泛型TestFixture的等效实现?
xUnit中泛型测试夹具的等效实现
xUnit 2.4及以上版本提供了和NUnit泛型TestFixture直接等效的实现——[GenericTypeTheory]特性,无需创建多个继承的抽象类。
方式一:使用[GenericTypeTheory](推荐,xUnit v2.4+)
直接在泛型测试类上标记该特性,指定要测试的类型参数,xUnit会自动为每个类型生成独立的测试实例,完全匹配NUnit的写法逻辑:
using Xunit; [GenericTypeTheory(typeof(double), typeof(float))] public class ServiceTests<T> { private readonly MyService<T> myService = new(); [Fact] public void SampleTest() { // 针对T类型的测试逻辑 } }
方式二:使用[Theory] + MemberData/ClassData(兼容旧版本)
如果使用的xUnit版本低于2.4,可以在测试方法层面通过[Theory]结合类型数据源实现泛型测试:
步骤1:定义类型数据源
public static class TestTypes { public static IEnumerable<object[]> Types => new List<object[]> { new object[] { typeof(double) }, new object[] { typeof(float) } }; }
步骤2:在测试方法中绑定泛型与数据源
public class ServiceTests { [Theory] [MemberData(nameof(TestTypes.Types), MemberType = typeof(TestTypes))] public void SampleTest<T>(Type type) { var myService = new MyService<T>(); // 针对T类型的测试逻辑 } }
你当前使用的继承抽象类的方式虽然可行,但[GenericTypeTheory]能更直接地对应NUnit的泛型TestFixture写法,大幅减少冗余代码。
内容的提问来源于stack exchange,提问作者Konrad
相关产品推荐
相关产品推荐

