如何解决如果测试超时,有没有办法从 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 举报,一经查实,本站将立刻删除。