当TC超时时我怎样才能捕获超时?例如,在下面的TC中我认为catch块会在超时后执行,但它不会。我希望在超时后执行相同的处理,就好像TC因异常而失败。
@Rule
public Timeout globalTimeout = new Timeout(3600000);
@Test
public void tc1 throws Exception {
try {
//do stuff
}
catch (Throwable t) {
// take screenshot, output results
}
}
答案 0 :(得分:0)
正如文件所说:
每个测试都在一个新线程中运行。如果超过指定的超时 在测试完成之前,它的执行被中断
Thread.interrupt()
。这发生在可中断的I / O和锁中,以及 对象和线程中的方法抛出InterruptedException
。
这意味着InterruptedException
会因超时而被抛出。识别Throwable
类型并处理日志记录案例,如下所示:
@Test
public void tc1 throws Exception {
try {
//do stuff
}
catch (Throwable t) {
// take screenshot, output results
if(t instanceof InterruptedException){
// InterruptedException logging case
}
}
}
答案 1 :(得分:0)
您可以创建第二个规则并使用TimeOut将其链接。请使用JUnit's RuleChain。
@Rule
public final TestRule timeout = RuleChain
.outerRule(new TestWatcher() {
@Override
protected void failed(Throwable e, Description description) {
if (e instanceof TestTimedOutException)
;//do your stuff here.
}
})
.around(new Timeout(3600000));
答案 2 :(得分:-1)
您也可以尝试以这种方式测试异常:
@Test(expected=TimeoutException.class)
public void tc1{
// call your method with parameter so that it will throws a timeoutexception
}
这意味着如果方法抛出TimeoutException,那么测试就可以了。