簡體   English   中英

ReSharper執行單元測試的控制順序

[英]Control order in which ReSharper executes unit tests

有沒有辦法告訴ReSharper在項目之前執行某組測試? 我仍然希望並行執行,我不需要按每個方法控制它,只是每個類都可以。 如果有所不同,測試框架就是MSTest。

我想這樣做的原因是一些測試工作在低水平並且非常快,但是其他測試工作在更高級別並且速度慢得多。 我希望快速測試首先運行,因為如果它們失敗了,那么我知道有什么不對,繼續沒有意義。 但是,ReSharper目前首先運行我的慢速測試。

編輯:測試不按字母順序運行(VS 2010上的R#7.1)。 我每個類都有一個源文件。 類中的測試似乎按照方法在源代碼中出現的順序運行,但我無法弄清楚R#如何確定測試類的順序。 這就是我所追求的,因為慢速和快速測試是在不同的類中。 這也不是按字母順序排列的,但從運行到運行都是一致的。

編輯2:好的,想通了(見答案)。

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

似乎測試執行按字母順序排列....所以你可以改變你的命名空間/類名來匹配測試順序。 但我想這不適合你。

另一種選擇是在“單元測試會話”窗口中向不同的測試會話添加測試 將快速測試移至會話#1並將測試慢速移至會話#2。 然后,您只運行所需的一個測試會話。

不是一個選項是TestCategory添加到您的測試方法:(即[TestCategory("Fast"), TestMethod][TestCategory("Slow"), TestMethod]類別 )和組你的測試單元測試會話窗口。 這對測試訂單沒有影響。

我想這樣做的原因是一些測試工作在低水平並且非常快,但是其他測試工作在更高級別並且速度慢得多。

我會建議幾種方法:

將測試拆分為兩個單獨的項目。 把“快速”測試放入

YourProject.Test.Unit

和緩慢的測試

YourProject.Test.Integration

集成測試通常是與其他組件(例如網絡,數據庫,文件系統等)交互的測試,這可能導致測試運行速度變慢。 可能是您的較慢測試正在訪問外部資源(我們不知道)。

或者使用@thersch建議使用類別來標記較慢的測試。 我會使用類別方法,你的測試確實都是單元測試,因此拆分它們是沒有意義的。

或者,您可以創建一個測試,按照您想要的順序編排對其他測試的調用 - 因此該測試本身充當“會話”。

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

}

在解決方案資源管理器>添加>有序測試中右鍵單擊您的UnitTest項目..

您無法從Resharper到達此有序測試,但它將顯示在VS Test Explorer中。 將您訂購的測試添加到特定的VS測試播放列表,並從您的Resharper會話/會話中刪除相關的測試。

為了節省很多樣板,我通常使用這種技術,使用數據庫添加>獲取>編輯>刪除測試,並使用[ClassCleanup]屬性清理方法,以便在其中一個測試失敗的情況下刷新測試插入數據庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM