我想运行一个单元测试,其中包含在运行时定义的超时。我想仅为特定测试定义超时,而不是整个类。
我看到这些是设定时间的方法:
@Rule
public Timeout globalTimeout = new Timeout(10000); // 10 seconds max per method tested
或
@Test(timeout=100) public void infinity() {
while(true);
}
但是当我运行此代码时,不会抛出任何异常。 我想确定测试因超时而失败的时间。
public Timeout testTimeout;
private void setTestTimeOut() {
if (!Strings.isNullOrEmpty(testTimeOut)) {
testTimeout = new Timeout(Integer.parseInt(testTimeOut));
}
}
如何捕捉异常?用try-catch(InterruptException)
包裹主要方法?
答案 0 :(得分:2)
添加TestWatcher
规则,该规则在运行时决定是否应用超时:
@Rule
public TestWatcher watcher = new TestWatcher() {
@Override
public Statement apply(Statement base, Description description) {
// You can replace this hard-coded test name and delay with something
// more dynamic
if (description.getMethodName().equals("infinity")) {
return new FailOnTimeout(base, 200);
}
return base;
}
};
您的原始方法无效,因为JUnit规则在测试代码开始运行之前生效,因此在测试中调整Timeout
对象的任何尝试都为时已晚。
答案 1 :(得分:-1)
@Test(timeout=xxx)
不会抛出TimeoutException
,它将无法通过测试。
您能否详细说明您想要测试的内容?