NUnit Универсальное тестовое устройство не отображается, когда параметр реализует универсальный интерфейс
У меня есть интерфейс, определенный так:
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
}
}
Тем не менее, это не отображается в Test Explorer. Если я делаю интерфейс не универсальным, это делает.
Так кто-нибудь знает обойти это или есть что-то еще, что я скучаю. Я думаю это потому что ITaskGenerator
это общий интерфейс, но я могу ошибаться.
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);
}
}