gpt4 book ai didi

java - 如何为 JUnit 测试用例运行启用全局超时?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:04:38 24 4
gpt4 key购买 nike

question建议使用 timeout @Test 注释的参数让 JUnit 在该超时期限后强制停止测试。

但到目前为止,我们有大约 5000 个单元测试,我们希望制定一项政策,要求开发人员绝不发布需要超过 10 秒才能完成的测试。该政策可能会说“瞄准 < 10 秒”,但我们希望确保 任何 测试在 30 秒后停止。 (这些数字只是示例,我们的想法是为大多数用例定义一些“足够好”的东西,但这也确保事情不会“永远”运行)

现在我想知道是否有一种方法可以在进入每个测试用例并添加该注释参数的情况下启用这种行为。

现有question也无济于事:我正在寻找一个更改来启用此功能,而不是每个测试类一个更改解决方案。一个中央全局交换机。不是每个文件或方法一个。

最佳答案

尽管 JUnit Jupiter(即 JUnit 5 中引入的编程和扩展模型)尚未内置 support for global timeouts ,您仍然可以自己实现全局超时支持。

唯一的问题是超时扩展当前无法抢先中止测试执行。换句话说,JUnit Jupiter 中的超时扩展目前只能计时测试的执行时间,然后在执行时间过长时抛出异常(即,在等待测试结束后,如果测试 挂起)。

无论如何,如果您想实现非抢占式全局超时扩展以用于 JUnit Jupiter,您需要执行以下操作。

  1. 查看 TimingExtension JUnit 5 用户指南中的示例以获取灵感。您将需要与此类似的代码,但如果 duration 超过配置的 timeout,您将希望抛出异常。如何配置全局超时由您决定:对其进行硬编码、从 JVM 系统属性中查找值、从自定义注释中查找值等。
  2. 使用 Java 的 ServiceLoader 机制注册您的全局超时扩展。参见 Automatic Extension Registration了解详情。

测试愉快!

关于java - 如何为 JUnit 测试用例运行启用全局超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50229133/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com