2010-11-26 117 views
4

我有一套使用Eclipse運行的44個JUnit測試(我從其他人那裏獲得了這些測試 - 我是JUnit測試的新手)。當我把它們放在一起時,其中24個失敗。但是,如果我單獨運行失敗的人,其中一些人畢竟會傳球。測試需要一點時間 - 例如,一個失敗的測試需要大約一到兩分鐘的時間才能完成,而只需幾秒鐘就可以完成所有測試。JUnit測試在eclipse中失敗時一起運行

我正在啓動多個測試,方法是右鍵單擊它們所在的文件夾並選擇「Run As - > JUnit Test」。我正在使用JUnit 3.我在開始時做了什麼錯誤/是否存在某種我缺少的選項?

回答

9

很難肯定地說沒有看到測試,但它聽起來像他們共享某些狀態或資源,未被正確重置爲下一個測試。

+0

在我的情況下,它是私人靜態變量正在改變。每次測試後我都必須重置變量。使用@After註釋標記清理方法。 – ZakiMak 2015-06-17 19:10:18

3

GaryF的回答是一種可能性。另一個原因是測試具有競爭條件:測試是否成功取決於某事發生的速度(可能因O/S的變幻莫測而異)。如果你單獨運行失敗的測試,他們總是成功或他們有時失敗。如果他們有時失敗了,那麼你可能有種族條件。

+0

我現在不能檢查,因爲代碼在工作,但是我嘗試了4或5次,他們總是成功。我也沒有選擇JUnite代碼中的任何內容來向我暗示其中存在時間條件。 – pyvi 2010-11-26 19:24:26

+0

@pyvi然後GaryF的情景與證據更加一致。 – 2010-11-27 00:33:50

5

要擴大Gary的答案,當右鍵單擊並執行Run As - > JUnit時,不能保證測試的運行順序,這也可能有助於破壞共享資源。

我會先看看您的setup()和teardown()方法,以確保共享資源正確重置。此外,由於您繼承了這些測試,因此您可能需要查看是否有任何測試相互依賴。雖然這是一種不好的做法,應該改變,但你也許可以創建一個測試套件()來確保它們的運行順序(至少在重新分解和分離測試之前)。

相關問題