2011-09-01 51 views
30

在這個post中,我問了一個小問題作爲更大問題的一部分。由於我還沒有得到答案,我在這裏提出了我的問題:JUnit是否按順序執行測試用例?

假設JUnit按順序執行測試用例是合理的:測試用例在下一個測試用例開始之前結束。它有不同的JUnit版本(我的優先級是JUnit4)嗎?如果沒有,是否有一種簡單的方法來強制JUnit按順序執行測試?

謝謝

+0

作爲一個側面說明,這裏是一些更多關於使用JUnit 4.7並行執行測試:HTTP://計算器。com/questions/423627/running-junit-tests-in-parallel – mort

+0

如果您在Maven構建中使用JUnit,並且使用-T參數將構建設置爲多線程(例如-T 4C),那麼測試將在可能的情況下並行運行 –

回答

23

是的,默認情況下我相信它會按順序運行測試。

JUnit 4.6引入了一個實驗ParallelRunner並行運行測試 - 我不知道它的當前狀態。但我認爲默認情況下並行性仍然是「選擇加入」功能。 (通過其他答案判斷,現在看起來這裏保持不變,但仍然以略微不同的形式 - 並且仍然選擇加入)。

+0

@FDinoff:是的,看起來現在很難找到4.6發行說明。我已刪除鏈接。 –

+0

平行而不是按順序運行測試通常會更好嗎?我們必須有什麼樣的硬件才能並行運行測試? – testerjoe2

+0

這聽起來像是除了調試以外確認序列的可接受方式嗎?用10種測試方法創建一個測試類。在測試類中創建一個整數列表。每種測試方法將其在課堂上的位置輸入到列表中。運行所有測試10次。每次,整數必須始終按正確的順序。 – testerjoe2

4

強大而合理的猜測:是的,JUnit默認爲單線程。

否則,人們不知道測試是否失敗,因爲代碼被破壞,或者如果某些測試並行運行,則由於併發問題而失敗。

+0

如果每個測試都使用自己的測試數據(並非總是可能),那麼並行運行測試會更好嗎? – testerjoe2

15

自JUnit 4.7以來,支持並行執行測試。但據我所知,它絕不會自動完成,您需要特別配置它,例如喜歡這裏:http://java.dzone.com/articles/running-junit-tests-parallel

但不要忘了:

良好的自動化測試應該是獨立的,孤立的,重複性好,使他們正在同時運行的理想人選。

我不知道你爲什麼問,但如果上述標準不符合,你可能想考慮一下你的測試設計。

+0

「良好的自動化測試應該是獨立的,獨立的和可重複的」 - 只要測試數據創建過程不是太耗時間/資源消耗,我們是否可以通過爲每個測試分開測試數據來實現這一目標? – testerjoe2

3

是,

而且還認爲@before@after的存在,你可能有恢復的狀態下試運行代碼。

+0

你能解釋一下嗎? – testerjoe2

1

是的。正如評論中提到的那樣,您應該仔細規劃測試用例設置和拆卸(所有超類影響這些操作),以及測試套件設置和拆卸。我記得,就我所知,JUnit並不保證測試用例的執行順序(也就是說,除非它們在套件中,我猜)。這很重要,應該促使您在測試之間執行非常精確的清理和SUT狀態恢復,並避免依賴其他測試結果的測試用例。你可能會說這是一種反模式:)。

-1

根據我的經驗,我可以說我們可以通過命名其中包含Test的方法名稱來序列化類中的測試。 例如:

@Test 

public ..... firstTest() 
{ 

} 

@Test 

public .... thirdTest() 
{ 

} 

@Test 

public....secondTest() 
{ 

} 

的順序是firstTest,thirdTest,secondTest

相關問題