2014-01-13 45 views
1

我們使用JUnit來執行集成測試以及依賴外部測試系統(不一定由我們自己的公司維護)的系統集成測試。在執行測試之前,驗證外部系統是否可用的最佳位置是什麼?

我想知道在運行測試用例之前將代碼放在哪裏以檢查系統是否可用?所以我可以確定是否有網絡或其他問題,而不是測試本身。

JUnit允許在JUnit-Rules中設置測試的某些部分。在規則中設置與外部系統通信的服務並在規則內對外部系統執行一些基本檢查(「ping」)是否是一個好主意?或者存儲狀態並在Test中使用JUnit假設(rule.isAvailable)來避免執行測試?

或者將此驗證代碼放在自定義JUnit Runner中會更聰明嗎?

還有甚至有另一種方法來做到這一點? (簡單地創建一些utils?)

如果某些條件沒有被滿足,目標是跳過測試,因爲很明顯測試會失敗。我知道這表明一個錯誤的異常處理,但有很多遺留代碼我不能完全改變。

我試圖自己找一些文章,但似乎搜索條件(「測試」,「外部系統」等)有點吃力。

謝謝!

+1

規則方法很好。 –

回答

0

考慮使用org.junit.Assume.*,如here所述。假設失敗時,默認情況下您的測試將被忽略。當你的假設失敗時,你可以編寫一個自定義運行器來做其他事情。

但關鍵是,當假設像外部服務的可用性失敗時,測試不會失敗。

+0

謝謝!假設我已經找到一些相關的主題以及:http://stackoverflow.com/questions/19358444/junit-how-to-make-conditional-tests和http://stackoverflow.com/questions/1689242/conditionally-忽略 - 測試在junit-4 – wemu

+0

很高興提供幫助。祝你的項目好運! – Vidya

0

如果ping適用於班級中的每一個單獨的測試,我會將ping調用放在@Before方法中。 @Before將在每個測試方法之前執行(即@JUnit -annotated方法)。

如果ping不適用於類中的所有測試,則必須從這些方法明確地打ping。

相關問題