1

我有一个测试,有:

@test(timeout = 50000)

如果测试因为超时而失败,我想做一些操作,然后才做。

我尝试下一个:

@Test(timeout=60000)
    public void test1() {
    try{
              // code
    }
    catch(Exception e){
        //operations after time out
    }
    }

但它不起作用。有什么帮助吗?

4

1 回答 1

1

无法使用 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();
}
于 2013-01-12T17:08:42.880 回答