Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.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
SurefireMaven插件中的分叉:使用分叉安全吗?_Maven_Unit Testing_Surefire - Fatal编程技术网

SurefireMaven插件中的分叉:使用分叉安全吗?

SurefireMaven插件中的分叉:使用分叉安全吗?,maven,unit-testing,surefire,Maven,Unit Testing,Surefire,我们有Maven Surefire插件来描述分叉。其中一个选项forkCount的解释如下: 选项指定要并行分叉的VM数量,以便 执行测试。当以“C”终止时,数字部分为 乘以CPU核心数。浮点值仅适用于 与“C”一起接受。如果设置为“0”,则不会分叉任何VM,并且 测试在主进程中执行 基于此,我可能会猜测,如果使用了一个分叉机制并重用了分叉(reuseForks=true),那么相同的JVM将用于多个测试。这意味着,如果我已将某个类加载到内存中,该类的静态成员可以在其他测试中重用,并意外失败 我

我们有Maven Surefire插件来描述分叉。其中一个选项forkCount的解释如下:

选项指定要并行分叉的VM数量,以便 执行测试。当以“C”终止时,数字部分为 乘以CPU核心数。浮点值仅适用于 与“C”一起接受。如果设置为“0”,则不会分叉任何VM,并且 测试在主进程中执行

基于此,我可能会猜测,如果使用了一个分叉机制并重用了分叉(reuseForks=true),那么相同的JVM将用于多个测试。这意味着,如果我已将某个类加载到内存中,该类的静态成员可以在其他测试中重用,并意外失败


我的理解正确吗?

你说得对。使用静态元素的测试不是线程安全的,应该:

如果使用
@NotThreadSafe
注释套件或参数化,则套件类将在单线程中执行。您还可以注释套件引用的单个测试类,套件中其他未注释的测试类可以并行运行

注意:正如JUnit运行程序所设计的,在父线程中调用用
@BeforeClass
@AfterClass
注释的静态方法。为
@NotThreadSafe
套件分配类以防止出现此问题