2012-11-26 24 views
9

有沒有辦法告訴ReSharper的在別人面前的一個項目執行某一組的測試?我仍然想要並行執行,並且我不需要按照每個方法來控制它,只是每個類都會執行。測試框架是MSTest,如果這有所幫助。控制順序ReSharper的執行單元測試

我想這樣做的原因是,某些測試中處於較低水平工作,是非常快的,但是其他的測試在更高層次工作,是要慢得多。我希望快速測試能夠首先運行,因爲如果它們失敗了,我就會知道有什麼地方出了問題,並且沒有必要繼續。不過,ReSharper目前首先運行我的慢速測試。

編輯:測試不是按字母順序爲我運行(VS 2010上的R#7.1)。每個類我有一個源文件。一類內的測試似乎在方法出現在源代碼的順序來運行,但我不能找出R·如何確定測試類的順序。這就是我所追求的,因爲緩慢而快速的測試分爲不同的類別。這也不是按字母順序的,但從跑步到跑步是一致的。

編輯2: OK,琢磨出來(見答案)。

回答

2

看來,測試執行是按字母順序的.... 形式所以,你可以改變你的命名空間/類名,相匹配的測試程序。但我想這不適合你。

另一個選項是將測試添加到「單元測試會話」窗口中的不同測試會話。將快速測試移動到會話#1並將測試減慢到會話#2。然後你只運行你需要的一個測試會話。

不是一個選項分類到TestCategory添加到您的測試方法(即:[TestCategory("Fast"), TestMethod][TestCategory("Slow"), TestMethod])和組你的測試中單元測試階段窗口。這有沒有效果測試順序。

+0

謝謝,我可以改變命名空間和類名,但命令不是我的字母 - 請參閱編輯。測試會議的想法是一個很好的想法(+1),儘管每次我打開不理想的解決方案時都需要做這件事。 – EM0

2

我想這樣做的原因是,某些測試中處於較低水平 工作,是非常快的,但是其他的測試在更高水平工作,並多 慢。

我建議幾個方法:

斯普利特測試分爲兩個獨立的項目。把「快」測試分爲

YourProject.Test.Unit

和慢速測試中

YourProject.Test.Integration

集成測試通常與其他成分相互作用測試(如網絡,數據庫,文件系統等),這可能會導致測試運行變慢。這可能是您的較慢測試正在訪問一個外部資源(我們不知道)。使用分類來標示出較慢的測試

或者使用@ thersch的建議。我會使用類別方法是你的測試真的都是單元測試,因此分割它們是沒有意義的。

+0

謝謝。我不想分裂成兩個項目,即使那樣,我也不知道如何確保更快的項目首先運行。 – EM0

4

這似乎有點破解,但我發現,如果我從項目中用慢速測試移除文件並重新添加它們,它們會最後運行。因此,看起來R#跟蹤包含測試類的源文件的添加順序並按照該順序運行它們。 (編輯.csproj文件重新排序文件沒有任何效果,所以它似乎沒有使用。)

1

或者,您可以創建一個Test,以所需順序編排調用其他測試 - 所以這個測試本身就像一個「會話」一樣。

[TestMethod] 
public void A_RunAllTests() 
{ 
    Test1(); 
    Test2(); 
    . 
    . 

} 
+0

這不會告訴你測試失敗的地方。如果雙擊失敗的測試'A_RunAllTests',它將會轉到'Test1'或'Test2'而不是實際的斷言。 – t3chb0t

1

右鍵單擊您的單元測試項目在Solution Explorer>添加>順序測試..

不能達到這個順序測試從ReSharper的,但它會在VS測試資源管理器中顯示。將您的有序測試添加到特定的VS測試播放列表中,並從Resharper會話/會話中刪除涉及的測試。

爲了節省我大量的樣板我通常使用這種技術與數據庫添加>獲取>編輯>刪除測試,並有一個清理方法與[ClassCleanup]屬性滑動測試插入數據庫的情況下,其中一個測試失敗。