2013-03-07 199 views
3

我想測試一段時間,比如說5秒,然後通過測試,如果沒有錯誤已被聲明。這可能與註釋?可以使用類似@Test(uptime=5000)的東西嗎?運行junit測試一定的時間

回答

7

問題被編輯修訂後回答

從根本上說,感覺就像你在這裏測試了錯誤的東西 - 它看起來非常奇怪的「沒有發生」是成功的標誌。

如果你想證明你的算法可以在一定的時間內運行不會失敗,我真的提取出一個週期,然後寫的類似測試:

@Test 
public void fineForFiveSeconds() { 
    long start = System.nanoTime(); 
    long end = start + TimeUnit.SECONDS.toNanos(5); 
    while (System.nanoTime < end()) { 
     test.executeOneIteration(); 
    } 
} 

這樣你沒有一個單獨的線程具有殺死工作代碼等

原來的答覆

這個答案寫之前這個問題表明,超時是成功的標誌,而不是失敗。

我覺得你只是想在@Test註釋的timeout屬性:

@Test(timeout = 5000) 

與文檔:

可選擇指定以毫秒爲單位的超時導致測試方法失敗,如果它需要長於那個毫秒數。

+0

只是爲了澄清,這只是測試失敗,測試方法運行的線程仍在運行,直到JVM停止。 – 2013-03-07 18:22:13

+0

我沒有很好地解釋我自己。我想跑一段時間,如果什麼都沒有發生,那就通過測試。 – dinigo 2013-03-08 03:19:55

+1

@ demil133:這是一個非常奇怪的要求 - 與我通常所期望的完全相反。通常情況下,代碼不及時完成是*失敗*的標誌,不成功。你真的想要'while(true){}'的實現成功嗎? – 2013-03-08 03:24:16