NUnit Generic test fixture не отображается, когда параметр реализует универсальный интерфейс


У меня есть интерфейс, определенный следующим образом:

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 - универсальный интерфейс, но я могу ошибаться.

1 2

1 ответ:

Попробуйте это:

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