微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果测试超时,有没有办法从 JUnit5 获得回调?

如何解决如果测试超时,有没有办法从 JUnit5 获得回调?

在 JUnit 4 中,我们过去必须使用 Timeout 规则,如果我们希望它超时,我们会明确地进行测试。 (实际上,我们最终将它放在所有测试的基类上,因为我们总是希望测试超时。)

这导致我们最终自定义Timeout 规则,以便在它中断测试之前记录其堆栈跟踪。

在 JUnit 5 中,超时现在始终处于活动状态(万岁),但我正在考虑如何在测试超时之前添加堆栈跟踪记录。

是否有某种拦截点或扩展在测试超时之前被称为,我们可以挂在 at 记录附加信息?

解决方法

我认为没有任何方法可以在测试超时之前立即执行,但是您可以实现一个 TestExecutionExceptionHandler 来检查 TimeoutException 和用它做点什么。

例如,您可以如下分析/打印 InterruptedException 中的 suppressed TimeoutException

class TimedOutTests {

    @RegisterExtension
    TestExecutionExceptionHandler timeoutExceptionHandler = (context,throwable) -> {
        if (throwable instanceof TimeoutException && throwable.getSuppressed().length > 0
                && throwable.getSuppressed()[0] instanceof InterruptedException) {
            throwable.getSuppressed()[0].printStackTrace(System.out);
        }
        throw throwable;
    };

    @Test
    @Timeout(value = 100,unit = MILLISECONDS)
    void takesTooLong() throws Exception {
        Thread.sleep(500);
    }

}

有关更多详细信息,请随时查阅 org.junit.jupiter.engine.extension.TimeoutInvocation 的实现。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。