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

时间:2010-11-02 09:39:10

标签: java multithreading unit-testing concurrency junit

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

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

1 个答案:

答案 0 :(得分:2)

我认为您最好的方法是将JUnit超时设置为所需超时的2-3倍,并使用ThreadMXBean进行自己的基准测试以测量CPU时间(如果可用)。如果您超时,则可以fail