捕获超时异常

时间:2015-05-13 10:44:58

标签: java junit

当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   
}   
}

3 个答案:

答案 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,那么测试就可以了。