2016-09-13 57 views
1

我發現代碼將導致測試失敗如果它運行的時間超過timeout毫秒。如果我想讓它通過?我有一個功能,我預計會永遠掛起。如果它掛起足夠長的時間,比如說10000毫秒,那麼我認爲它是永久懸掛的,測試應該通過。JUnit:測試應該通過,如果它掛了一段時間

@Test(timeout=10000) public void test() { 
    while(true) 
} 
+0

除了該方法永不返回,您的測試會如何確認? – Aelexe

+0

我想測試一下,查詢關閉的連接將永遠掛起。 (代碼重試永久建立連接)。 – Ben

+0

有一個很好的概念叫**快速失敗**。當事情破裂時,你想盡快回來。其他任何只是**增加**你的問題。 – GhostCat

回答

2

你說你要test that querying a closed connection will hang forever. (The code retries establishing the connection forever) 所以,你要永遠掛程序,每次有人試圖查詢關閉的連接?

我最好在連接關​​閉時拋出異常。

+0

我的代碼是一個開源庫的包裝。我相信這是圖書館的行爲,我無法改變它。 – Ben

+1

我會爲該庫編寫外觀,並阻止通過例如查詢關閉的連接。拋出異常。然後,我將開始尋找一個永遠不會永久掛起的圖書館...... – staszek

+1

順便說一句,你可以在例如之後停止打開連接。 5000毫秒,然後你可以使用Mockito驗證該方法以超過5000秒結束: 'Mocktio.verify(object,Mockito.timeout(6000))。equals(null);' – staszek