4

假设我有一个 JUnit 单元测试,它有两个部分,我不想将这些部分分成单独的@Test方法。还假设我想要一个timeout测试参数。

如何更改/拦截/控制超时断言失败消息以指示测试的哪一部分超时?

这是一个不起作用的尝试:

@Test(timeout = 1000)
public void test() {
    try {
        // part one of the test
    } catch (Throwable e) {
        Assert.fail("Part one failed");
    }

    try {
        // part two of the test
    } catch (Throwable e) {
        Assert.fail("Part two failed");
    }
}
4

2 回答 2

2

只是阅读文档,没有。超时自动使测试失败。这不会引发异常——它是由测试运行器完成的。您可以编写自己的测试运行程序,但您仍然很难找出失败的地方。我建议以不同的方式构建您的测试。可能有你自己的计时器,只是没有通过测试。

于 2012-12-31T18:15:57.227 回答
1

正如您所发现的,JUnit 的超时功能相当有限。对于需要更多功能的时间相关测试,我使用了 awaitility。您可以使用“命名等待”来自定义消息:

with().pollInterval(ONE_HUNDERED_MILLISECONDS)
    .and().with().pollDelay(20, MILLISECONDS)
    .await("customer registration").until(
            costumerStatus(), equalTo(REGISTERED)
);
于 2012-12-31T18:14:55.600 回答