2009-08-13 63 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