如何让 JUnit 在超时时保持一致?
JUnit @Test
具有指定 timeout
参数的有用功能,这样,如果编写得不好的程序花费的时间超过 timeout
秒,就会自动终止。问题是这使用时钟时间而不是CPU时间 - 因此测试实际上会在两次运行之间运行不同的时间。例如,测试可能会运行 1.901 或 1.894 秒,超时时间为 2 秒,具体取决于 CPU 上同时运行的其他作业。
我可以指定一个在运行中保持一致的超时或类似的超时吗? (这个问题的扩展包括:跨机器一致等)
JUnit @Test
s 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我认为最好的方法是将 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 thenfail
if you've exceeded your timeout.