【问题标题】:Forking in Surefire Maven Plugin: is it safe to use forking?Surefire Maven 插件中的分叉:使用分叉安全吗?
【发布时间】:2015-06-16 18:06:26
【问题描述】:

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

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

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

我的理解正确吗?

【问题讨论】:

    标签: maven unit-testing surefire


    【解决方案1】:

    你是对的。带有静态元素的测试不是线程安全的,应该是excluded from parallel execution

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

    注意:按照 JUnit runner 的设计,带有@BeforeClass@AfterClass 注解的静态方法在父线程中被调用。将课程分配给@NotThreadSafe Suite 以防止出现这种问题。

    【讨论】:

      猜你喜欢
      • 2011-03-31
      • 1970-01-01
      • 2018-07-15
      • 2019-08-20
      • 1970-01-01
      • 2011-04-05
      • 1970-01-01
      • 2019-08-11
      • 2013-06-06
      相关资源
      最近更新 更多