c# - 当参数实现通用接口(interface)时,NUnit 通用测试夹具不显示

标签 c# unit-testing generics nunit

我有一个这样定义的接口(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> 的所有实现者界面,为所有这些运行契约(Contract)测试。

幸运的是,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
        }
    }

但是,这不会显示在测试资源管理器中。如果我将接口(interface)设置为非通用接口(interface),它就会这样做。

那么有没有人知道解决这个问题的方法,或者我还缺少其他东西。我认为这是因为 ITaskGenerator是一个通用接口(interface),但我可能是错的。

最佳答案

试试这个:

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

关于c# - 当参数实现通用接口(interface)时,NUnit 通用测试夹具不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35773705/

相关文章:

iPhone:应用程序测试和核心定位

C# 如何让泛型方法等待?

c# - Static Class是引用类型还是值类型?

android - 使用 mockito 和事件监听器进行单元测试 MVP

c# - 请求上下文中的 ServiceStack HasPermission

python - PyTest - 登录生产代码

原始类型(Int、Float、Double)的泛型会产生奇怪的错误消息

java - Type<Type> 叫什么?

c# - 循环 TabItem 复选框

c# - 系统.Windows.Markup.XamlParseException