如何让 JUnit 在超时时保持一致?

发布于 2024-09-30 05:32:20 字数 291 浏览 2 评论 0原文

JUnit @Test 具有指定 timeout 参数的有用功能,这样,如果编写得不好的程序花费的时间超过 timeout 秒,就会自动终止。问题是这使用时钟时间而不是CPU时间 - 因此测试实际上会在两次运行之间运行不同的时间。例如,测试可能会运行 1.901 或 1.894 秒,超时时间为 2 秒,具体取决于 CPU 上同时运行的其他作业。

我可以指定一个在运行中保持一致的超时或类似的超时吗? (这个问题的扩展包括:跨机器一致等)

JUnit @Tests have the useful ability to specify a timeout argument so that a poorly written program gets killed automatically if it takes longer than timeout seconds. The problem is this uses clock time instead of CPU time - so a test will actually run for different amounts of time between runs. For example, a test might run for 1.901 or 1.894 seconds for a 2 second timeout, depending on what other jobs are running on the CPU at the same time.

Can I specify a timeout or similar that would be consistent across runs? (Extensions to this question include: consistent across machines, etc)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

转角预定愛 2024-10-07 05:32:20

我认为最好的方法是将 JUnit 超时设置为所需超时的 2-3 倍,并使用 ThreadMXBean 来测量 CPU 时间(如果可用)。如果超过超时时间,您可能会失败

I think your best approach is to set the JUnit timeout to ~2-3x your required timeout and do your own benchmarking using a ThreadMXBean to measure CPU time if available. You can then fail if you've exceeded your timeout.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文