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 ответ:
Попробуйте это:
[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); } }