我已经使用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