我有一个测试,有:
@test(timeout = 50000)
如果测试因为超时而失败,我想做一些操作,然后才做。
我尝试下一个:
@Test(timeout=60000)
public void test1() {
try{
// code
}
catch(Exception e){
//operations after time out
}
}
但它不起作用。有什么帮助吗?
无法使用 JUnit 的timeout
参数执行您在此处描述的操作,因为它不提供回调来处理超时后的操作。
但是,您当然可以编写自己的测试工具来做到这一点。在下面的示例中,我希望代码在一秒钟内执行,但我的实际代码执行需要 2 秒钟。在这种情况下,我们捕获TimeoutException
并且您可以在该捕获块中执行您的附加操作。
@Test
public void testMe() {
// test must finish within one second
int expectedExecutionInSeconds = 1;
RunnableFuture<String> runnableFuture = new FutureTask<String>(new Callable<String>() {
public String call() throws Exception {
// your actual code goes in here
Thread.sleep(2000);
return "ok";
}
});
ExecutorService executorService = Executors.newSingleThreadExecutor();
executorService.execute(runnableFuture);
try {
String result = runnableFuture.get(expectedExecutionInSeconds, TimeUnit.SECONDS);
assertEquals("ok", result);
}
catch (TimeoutException ex) {
// stop code
runnableFuture.cancel(true);
System.out.println("do other stuff");
}
catch (Exception e) {
fail("other stuff is failing");
}
executorService.shutdown();
}