当参数实现通用接口时,NUnit 通用测试夹具不显示
NUnit Generic test fixture not displaying when parameter implements generic interface
我有一个这样定义的接口:
public interface ITaskGenerator<T> where T : ITaskRequest
{
int CreateTask(T request);
}
和实施者:
public class OrderTaskGenerator : ITaskGenerator<OrderTaskRequest>
{
public int CreateTask(OrderTaskRequest request)
{
..
}
}
我想做的是使用 NUnit 制作一个通用测试夹具,我可以指定 ITaskGenerator<ITaskRequest>
接口的所有实现者,运行 对所有这些实现者进行契约测试.
幸运的是,NUnit 有能力做到这一点,指定通用测试装置 here。我写了以下内容([TestFixture(typeof(OrderTaskGenerator))]
属性对于 NUnit 传递正确的类型很重要):
[TestFixture(typeof(OrderTaskGenerator))]
public class ITaskGeneratorContract<T> where T : ITaskGenerator<ITaskRequest>, new()
{
[Test]
public void CreateTask_Returns_InvalidException_If_Task_ID_Is_Empty()
{
// Test goes here
}
}
但是,这不会显示在测试资源管理器中。如果我将接口设置为非通用接口,它就会这样做。
所以有没有人知道解决这个问题的方法,或者我还缺少其他东西。我认为这是因为 ITaskGenerator
是一个通用接口,但我可能错了。
试试这个:
[TestFixture(typeof(OrderTaskGenerator), typeof(OrderTaskRequest))]
public class TaskGeneratorContractTest<T, TRequest> where T : ITaskGenerator<TRequest>, new() where TRequest : ITaskRequest
{
private T _sut;
public TaskGeneratorContractTest()
{
_sut = new T();
}
[Test]
public void CreateTask_Returns_InvalidException_If_Task_ID_Is_Empty()
{
Assert.IsTrue(true);
}
}
我有一个这样定义的接口:
public interface ITaskGenerator<T> where T : ITaskRequest
{
int CreateTask(T request);
}
和实施者:
public class OrderTaskGenerator : ITaskGenerator<OrderTaskRequest>
{
public int CreateTask(OrderTaskRequest request)
{
..
}
}
我想做的是使用 NUnit 制作一个通用测试夹具,我可以指定 ITaskGenerator<ITaskRequest>
接口的所有实现者,运行 对所有这些实现者进行契约测试.
幸运的是,NUnit 有能力做到这一点,指定通用测试装置 here。我写了以下内容([TestFixture(typeof(OrderTaskGenerator))]
属性对于 NUnit 传递正确的类型很重要):
[TestFixture(typeof(OrderTaskGenerator))]
public class ITaskGeneratorContract<T> where T : ITaskGenerator<ITaskRequest>, new()
{
[Test]
public void CreateTask_Returns_InvalidException_If_Task_ID_Is_Empty()
{
// Test goes here
}
}
但是,这不会显示在测试资源管理器中。如果我将接口设置为非通用接口,它就会这样做。
所以有没有人知道解决这个问题的方法,或者我还缺少其他东西。我认为这是因为 ITaskGenerator
是一个通用接口,但我可能错了。
试试这个:
[TestFixture(typeof(OrderTaskGenerator), typeof(OrderTaskRequest))]
public class TaskGeneratorContractTest<T, TRequest> where T : ITaskGenerator<TRequest>, new() where TRequest : ITaskRequest
{
private T _sut;
public TaskGeneratorContractTest()
{
_sut = new T();
}
[Test]
public void CreateTask_Returns_InvalidException_If_Task_ID_Is_Empty()
{
Assert.IsTrue(true);
}
}