在Surefire Maven插件中分叉:使用分叉是否安全?

时间:2015-06-16 18:06:26

标签: maven unit-testing surefire

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

  

选择以并行方式指定要并行分叉的VM数   执行测试。当以" C"终止时,数字部分为   乘以CPU核心数。浮点值仅为   与" C"一起被接受。如果设置为" 0",则不会分叉任何VM   测试在主要过程中执行。

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

我的理解是否正确?

1 个答案:

答案 0 :(得分:0)

你是对的。使用静态元素进行的测试不是线程安全的,应该是excluded from parallel execution

  

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

     

注意:根据JUnit运行者的设计,在父线程中调用使用@BeforeClass@AfterClass注释的静态方法。将类分配给@NotThreadSafe套件以防止出现此问题。