NUnit中的自定义过滤器是否可行?

NUnit中的自定义过滤器是否可行?,nunit,filter,Nunit,Filter,是否可以定义自定义筛选器,以便NUnit仅运行特定测试?我的许多Nunit测试都用自定义属性“BugId”标记。是否可以编写一个筛选器,以便传入一个数字,并仅使用该属性和数字运行测试?如果是这样,则显示实体模型或真实代码。过滤器是否需要使用自定义属性,或者是否可以使用NUnit? 差不多 [Test] [Category("BugId-12234")] public void Test() { .... } 。。。然后使用/include=STR标志: nunit-console /inc

是否可以定义自定义筛选器,以便NUnit仅运行特定测试?我的许多Nunit测试都用自定义属性“BugId”标记。是否可以编写一个筛选器,以便传入一个数字,并仅使用该属性和数字运行测试?如果是这样,则显示实体模型或真实代码。

过滤器是否需要使用自定义属性,或者是否可以使用NUnit? 差不多

[Test]
[Category("BugId-12234")]
public void Test()
{
  ....
}
。。。然后使用
/include=STR
标志:

nunit-console /include=BugId-12234 ...

??我建议使用子类化Category来创建自定义属性,但我认为这不允许向属性中添加可切换的参数…

我认为我有一个优雅的解决方案,但遗憾的是,它并没有像我预期的那样工作。我希望(也许您可以更努力地)从IgnoreAttribute类派生。我认为这会奏效:

[Test, BugId("411")]
public void TestMethod()
{
    // your test
}

public class BugIdAttribute : IgnoreAttribute
{
    private string id;

    public BugIdAttribute(string id) : base("Ignored because it is bug #" + id)
    {
        this.id = id;
    }
}

但似乎不止这些。很抱歉发布了一个实际上不是答案的答案,但我认为对于那些比我更了解nunit内部的人来说,这是一个很好的垫脚石。

从nunit 2.4.6开始,nunit属性不是密封的,子类将被识别为它们的基类。因此:

public class BugId : TestAttribute
{
    public BugId(int bugNumber) : base("Test for Bug #" + bugNumber) { }
}

[BugId(1)]
public void Test() {}
可以在命令行上调用,如下所示:


nunit console/include=“测试Bug#1”

我不想忽略测试。我希望能够看到bug已经被修复,并运行与该bug相关的所有测试。在查看NUnit代码之后,我认为这是我们在不修改NUnit的情况下所能做的最好的事情。谢谢你的回答。