我已經使用JUnit的參數化測試功能來一次又一次地運行不同配置的相同測試。我的問題是,測試的時間是否適用於每個測試運行或單獨測試。JUnit,參數化測試的超時
更具體一點:如果我的測試只運行一個參數,並且測試的超時時間爲10分鐘,那麼如果我再添加兩個條目來運行相同的測試,測試的超時是否變成30分鐘?
如果不是,那我該如何配置它?
我已經使用JUnit的參數化測試功能來一次又一次地運行不同配置的相同測試。我的問題是,測試的時間是否適用於每個測試運行或單獨測試。JUnit,參數化測試的超時
更具體一點:如果我的測試只運行一個參數,並且測試的超時時間爲10分鐘,那麼如果我再添加兩個條目來運行相同的測試,測試的超時是否變成30分鐘?
如果不是,那我該如何配置它?
jackrabbit是正確的,他說超時適用於每個執行,而不是方法。這只是他/她答案的擴展。使用下面的代碼作爲示例:執行
@RunWith(Parameterized.class)
public class ParameterWithTimeoutTest {
@Parameters
public static Iterable<Object[]> data() {
return Arrays.asList(new Object[][] {{ 5 }, { 2 }, { 1 }});
}
private long input;
public ParameterWithTimeoutTest(long input) {
this.input = input;
}
@Test(timeout=3000)
public void testTimeout() throws Exception {
Thread.sleep(input*1000);
}
}
的testTimeout
方法三次,用分別參數5,2,1。由於超時,只有第一次執行失敗。
如果你想設置的類執行一個全球性的超時時間,你可以使用一個@ClassRule Timeout:
public class ParameterWithTimeoutTest {
@ClassRule
public static final TestRule globalTimeout = new Timeout(5000);
@Parameters
public static Iterable<Object[]> data() {
return Arrays.asList(new Object[][] {{ 5 }, { 2 }, { 1 }});
}
// ...
然而,這種失敗的InteruptedException,不超時錯誤。但至少它超時了。如果需要進行一系列測試,可以在套件上使用此功能。
優秀的實驗!沒有時間這麼走捷徑。 – jackrabbit 2012-01-19 21:36:07
基本上你想超時與輸入大小成正比嗎? – dierre 2012-01-18 20:19:36