2011-06-06 97 views
21

不止一次the question has been asked在SO上。但唯一的答案是給出了「你不應該需要命令你的單元測試,這是壞的,因爲」或「你可以避免,如果...」如何訂購NUnit測試

我已經知道它是壞的,爲什麼它是壞的,以及避免它的技術。但那不是我想知道的。我想知道是否可以命令執行NUnit測試,而不是按字母順序。坦率地說:我實際上希望國家能夠從一個測試傳播到另一個測試。相信我,我有一個聰明的理由,這違背了平常的哲學。

MSTest具有「有序測試」功能,這在某些情況下非常有用。我想在NUnit中擁有這種能力。可以做到嗎?

回答

9

解決方法(hack)是按字母順序排列測試用例名稱。看到這個線程:

https://bugs.launchpad.net/nunit-3.0/+bug/740539

依託字母順序是一種變通方法,您可以使用,但它是文檔和支持超出了顯示器的視覺秩序。理論上它可以隨時改變。在實踐中,它不會改變,直到NUnit 3.0,所以你很安全使用它作爲解決方法

這個引用是來自NUnit的主要開發者查理普爾。

看起來他們似乎有一個計劃來支持NUnit 3中的有序測試,儘管他們將如何這樣做仍在討論之中。

5

只是NUnit 2.5.1的更新。根據文件,有些情況下,即使是字母順序也不被支持。

NUnit TestCaseAttribute

執行

的順序在NUnit的2.5,單獨的測試用例按字母順序排序並 以該順序執行。使用NUnit 2.5.1,個案不是 排序,而是按照NUnit發現它們的順序執行。 此命令不遵循屬性的詞法順序,並且 將經常在不同編譯器或CLR的不同版本 之間變化。

其結果是,當TestCaseAttribute出現多次上的方法 或當其它數據提供屬性組合使用與 TestCaseAttribute,的測試用例的順序是不確定的。

2

嘗試使用NameParameters參數與您希望傳遞一個字符串的TestName,爲了TestCase的(),以通過測試名稱進行排序。

[TestCase(..., TestName = "1stTest")] 
    [TestCase(..., TestName = "2ndTest")] 
16

更新NUnit的3.2.0 - 現在它支持OrderAttribute

OrderAttribute可能放置在測試方法上以指定測試運行的順序。 例子:

public class MyFixture 
{ 
    [Test, Order(1)] 
    public void TestA() { ... } 


    [Test, Order(2)] 
    public void TestB() { ... } 

    [Test] 
    public void TestC() { ... } 
} 

https://github.com/nunit/docs/wiki/Order-Attribute

0

爲Nuint你可以用下面的代碼。

[TestMethod] 
    [Priority(2)]