2010-02-12 81 views
14

編輯:筆記,問題288805是相似的,但是,我專門問我怎麼做MSTest的選擇默認測試順序。請看這個問題的其餘部分。謝謝Eilon的the linkMSTest如何確定運行測試方法的順序?

我正在查看一個傳統的MSTest項目。 測試總是以相同的順序運行。 訂單不是字母,而是在兩個* .cs TestMethod文件中的方法之間彈跳 。

我沒有更改舊版 代碼的物理順序。爲了方便起見,我在第一次測試的方法名稱上追加了「MSTest01」 ,第二次測試的方法名稱爲「MSTest02」, 方法名稱等。

令我吃驚的是,TestMethod 功能的執行順序改變了; #3第一,#6秒,#5第三, 等等。

當我刪除從 TestMethod的函數名的「MSTestnn」的字符串,它們的執行順序 從 改回以前的順序,即從第一個cs文件 一個測試,兩次測試第二的.cs文件,來自第一個 .cs文件的五個測試,等等。

看來,文件的位置可能不是一個因素 而TestMethod的函數名可能是一個因素。

問題:任何人都可以解釋MSTest如何決定TestMethod函數的執行順序嗎?

+4

通常,您不應該關心單元測試運行的順序。這就是說,這是一個有趣的問題。 – Mathias 2010-02-12 21:49:56

+1

@ Mathias 我同意。我喜歡xUnit.net以隨機順序運行測試的方式。隨機順序是最好的選擇,因爲它可能會揭示不應該存在的順序依賴關係。看看我對特洛伊的評論。 – gerryLowry 2010-02-12 22:16:26

+0

?奇怪的是,我對特洛伊的評論似乎已經消失,連同他的問題。 F.Y.I. – gerryLowry 2010-02-15 15:26:29

回答

6

我相信MSTest執行測試方法,按照它們的'ID'排序(似乎是它們的完整命名空間)。

我創建了一個TestProject1,它包含4個未測試(UnitTest1,... 2,... A,... B)。每個單元測試包含5種測試方法(TestMethodA,... B,... 1,... 2,... 3)。他們在測試類中被隨機排列。現在,我每次運行MSTest的時間,該測試是在相同的順序執行:

TestProject1.UnitTest1.TestMethod1 
TestProject1.UnitTest1.TestMethod2 
TestProject1.UnitTest1.TestMethod3 
TestProject1.UnitTest1.TestMethodA 
TestProject1.UnitTest1.TestMethodB 
TestProject1.UnitTest2.TestMethod1 
TestProject1.UnitTest2.TestMethod2 
TestProject1.UnitTest2.TestMethod3 
TestProject1.UnitTest2.TestMethodA 
TestProject1.UnitTest2.TestMethodB 
TestProject1.UnitTestA.TestMethod1 
TestProject1.UnitTestA.TestMethod2 
TestProject1.UnitTestA.TestMethod3 
TestProject1.UnitTestA.TestMethodA 
TestProject1.UnitTestA.TestMethodB 
TestProject1.UnitTestB.TestMethod1 
TestProject1.UnitTestB.TestMethod2 
TestProject1.UnitTestB.TestMethod3 
TestProject1.UnitTestB.TestMethodA 
TestProject1.UnitTestB.TestMethodB 

改變這種秩序的唯一方法是重命名一個的TestClass或TestMethod的。例如,如果我將TestTest1的TestMethodB重命名爲TestMethod4,它將在TestMethodA之前執行。

要查看測試方法的ID,請從VS打開「測試視圖」窗口,然後右鍵單擊列標題(例如測試名稱) - >「添加/刪除列...」並添加「ID '欄。

+3

未指定此行爲,它可以在沒有通知的情況下更改。 – 2014-08-11 08:14:53

+0

您是如何獲得MSTest輸出實際執行訂單的?我正試圖在這裏實現相同:https://stackoverflow.com/questions/48379363/how-to-output-the-execution-order-of-unit-tests-in-visual-studio-2017 – philreed 2018-01-22 11:06:28

2

至於VSTest執行順序。下面是它是如何在你的TestProject組織:

  1. 排序CS-文件在您的項目通過其創建時間ASC
  2. 在每個文件

例如

  • 方式的位置,你必須在3個CS文件項目。

    • 的UnitTest1.cs - 與方法TestMethod05和TestMethod03
    • UnitTest2.cs創建01/01/1970 - 與方法TestMethod02創建1970年5月1日。
    • UnitTest3.cs - 使用方法TestMethod01創建於03/01/1970。

    然後執行測試的順序是這樣的:

    TestProject1.UnitTest1.TestMethod05 
        TestProject1.UnitTest1.TestMethod03 
        TestProject1.UnitTest3.TestMethod01 
        TestProject1.UnitTest2.TestMethod02 
    

    您可以看到使用命令 '默認順序':

    vstest.console.exe TestProject1.dll/ListTests

  • +0

    有沒有辦法在vstest中更改默認順序,其他嘗試混淆文件創建時間(刪除,重新創建)? – Razkar 2017-12-07 21:34:28

    +0

    您可以嘗試使用播放列表。右鍵單擊Test Explorer中的Test方法=>添加到播放列表=>新建播放列表 – 2017-12-08 09:34:41

    相關問題