NUnit 参数实现通用接口时不显示通用测试夹具

本文关键字:显示 测试 夹具 接口 参数 实现 NUnit | 更新日期: 2023-09-27 18:37:15

我有一个接口定义如下:

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 有能力做到这一点,使用此处指定的通用测试夹具。我写了以下内容([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是一个通用接口,但我可能是错的。

NUnit 参数实现通用接口时不显示通用测试夹具

试试这个:

[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);
    }
}