2009-08-13 23 views
8

是否可以定义一个自定义过滤器,以便NUnit只运行特定的测试?我有许多用自定义属性“BugId”标记的Nunit测试。是否可以编写一个过滤器,以便我可以传入一个数字,并只运行具有该属性和数字的测试?如果是这样显示样机或真实的代码。NUnit中的自定义过滤器可能吗?

回答

3

从NUnit 2.4.6开始,NUnit属性未被密封,子类将被识别为其基类。因此:

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

[BugId(1)] 
public void Test() {} 

可以这样调用的命令行:

NUnit控制台/包括=“测试了BUG#1”

5

过滤器是否需要使用您的自定义属性,或者您可以使用NUnit Category? 喜欢的东西

[Test] 
[Category("BugId-12234")] 
public void Test() 
{ 
    .... 
} 

...然后使用/include=STR标志:

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

?我建议继承类别以使您的自定义属性,但我不认为这允许您添加一个可切换参数到您的属性...

+0

看NUnit的代码后,我觉得这是我们可以在不修改NUnit的情况下做到最好。感谢您的回答。 – 2009-08-18 12:38:08

0

我以为我有一个优雅的解决方案,但唉,不按我的预期工作。我希望(也许你可以付出更多努力)从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的内部知识比我更了解的人来说,这是一个很好的踏脚石。

+0

我不想忽视这个测试。我希望能够看到该错误已被修复,并运行与该错误相关的所有测试。 – 2009-08-14 12:40:25