Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我如何让JUnit在超时时保持一致?_Java_Multithreading_Unit Testing_Concurrency_Junit - Fatal编程技术网

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

Java 我如何让JUnit在超时时保持一致?,java,multithreading,unit-testing,concurrency,junit,Java,Multithreading,Unit Testing,Concurrency,Junit,JUnit@Tests具有指定超时参数的有用功能,因此,如果一个写得不好的程序花费的时间超过超时秒,它就会自动终止。问题是它使用时钟时间而不是CPU时间,所以测试实际上会在两次运行之间运行不同的时间。例如,测试可能运行1.901秒或1.894秒,超时时间为2秒,具体取决于CPU上同时运行的其他作业 我是否可以指定一个超时值或类似值,以便在运行期间保持一致?(这个问题的扩展包括:跨机器的一致性等)我认为您最好的方法是将JUnit超时设置为所需超时的2-3倍,并使用测试工具进行自己的基准测试,以测量

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


我是否可以指定一个超时值或类似值,以便在运行期间保持一致?(这个问题的扩展包括:跨机器的一致性等)

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

在不同的机器上,我认为不会。根据cpu+ram等的不同,您的代码将需要不同的防御时间。这或多或少是我所想的。但是,在同一台机器上运行的一致性呢?您到底想测试什么?执行这段代码需要1.8942451秒,是不是,嗯,没用?@Ishtar我不知道你刚才说了什么。这里真正的问题是什么?你为什么关心0.007秒?上面指定的两个值都在2s超时下,如果2s不够,请再给测试一秒钟或重写它。您可以根据从mbean中提取的CPU时间实现自己的junit超时。。。哦,我可能会这么做:我试过了,几乎奏效了。除了:1)2-3x仍然只是一个猜测,2)Thread.sleep()
不会增加CPU时间,但会占用更多的时间(因此,休眠1.5秒的程序将通过单元测试,该测试本应在1秒后超时)。