當我使用註解@Test(timeout = 3000)運行測試並超時時,它立即終止測試,並且不會調用用@After註釋的tearDown方法。Junit4 - 在測試超時時清除
在這種情況下清理的方法是什麼?
編輯: 我的測試是使用jax-rs通過線路調用資源終點,並且測試在http請求中超時。這種情況下,我相當肯定@After沒有被調用
當我使用註解@Test(timeout = 3000)運行測試並超時時,它立即終止測試,並且不會調用用@After註釋的tearDown方法。Junit4 - 在測試超時時清除
在這種情況下清理的方法是什麼?
編輯: 我的測試是使用jax-rs通過線路調用資源終點,並且測試在http請求中超時。這種情況下,我相當肯定@After沒有被調用
嚴格來說,它不殺死測試,它會失敗。這顯然意味着用@After
註解的方法將運行。
下面的代碼工作就像我的魅力。
@Test(timeout=1)
public void testTimeout() {
try {
Thread.sleep(10);
} catch (InterruptedException ex) {}
}
@After
public void after() {
System.out.println("@After is invoked, indeed.");
}
輸出是,
Testsuite: javaapplication1.MainTest
After is invoked, indeed.
Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0.054 sec
我有一些問題與超時屬性了。也許這可以幫助你找到四個問題...
在我的情況下,混淆是由於在一個方法中用@Test(timeout = ...)註釋的測試代碼運行在一個單獨的線程中。因此,我在測試過程中訪問的一些ThreadLocal內容無法在@After方法中清除。
我的不好,我應該給更多的信息。我的測試通過網絡使用jax-rs調用了一堆資源端點,所以我真的不確定當測試在http請求中超時會發生什麼,我認爲它只是殺死了測試產生的所有線程。你在說什麼類似的東西嗎? – Prasanna 2011-02-24 16:13:37
@Rule
public Timeout to = new Timeout(300000);
這從JUnit 4.7開始工作。
是的,我正在使用@After和超時似乎沒有被調用。 – Prasanna 2011-02-24 08:42:33
@Prasanna:我剛剛更新了我的帖子以包含我的測試。 – 2011-02-24 08:48:18