【问题标题】:Run JUnit test *methods* in isolation单独运行 JUnit 测试 *methods*
【发布时间】:2018-02-08 18:29:35
【问题描述】:

maven-surefire-plugin 是否能够单独运行所有 JUnit 测试方法?即,它是否能够为每个测试方法而不是每个测试类派生一个 JVM?

不推荐使用的选项

<forkMode>pertest</forkMode>

现在的

<forkCount>1</forkCount>
<reuseForks>false</reuseForks>

似乎只为每个测试类分叉。

PS:测试方法应该是独立的,因此没有人需要在新的 JVM 上运行每个方法(并不是说它会非常昂贵)。但我想知道是否有这样的选择。

【问题讨论】:

标签: java maven junit maven-surefire-plugin


【解决方案1】:

我发现 this project 声称可以这样做,尽管我尝试时它似乎不起作用(可能已过时)。无论如何,我想除了基本的@Test-annotated 方法之外,这对任何东西都不起作用:没有@RunWith(Parameterized.class) 等。

【讨论】:

    【解决方案2】:

    Maven Surefire 插件支持此配置:

    <parallel>methods</parallel>
    

    对于 JUnit 版本 >= 4.7

    例如:

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.20</version>
        <configuration>
          <parallel>methods</parallel>
          <threadCount>10</threadCount>
        </configuration>
      </plugin>
    

    更多详情here.

    根据您的评论编辑 1

    我想在一个新的 JVM 上运行每个测试方法,而不是在同一个 JVM 上的另一个线程上

    当使用reuseForks=trueforkCount > 1 时,测试类被一个接一个地交给分叉的进程。因此,parallel=methods 类在forkCount 并发进程中执行,这些进程中的每一个使用threadCount 数量的线程来并行执行一个类的方法。

    所以,surefire 似乎不支持您的用例。

    FWIW,为 每个 测试方法生成一个 JVM 听起来可能会很昂贵。您是否正在处理测试方法在 JVM 中具有不需要的副作用(可能它们设置系统属性或更改静态)并且这些副作用无法隔离的问题?如果是这样,也许修改测试以消除这些副作用可能比实施定制且可能昂贵的测试运行器更可取?

    【讨论】:

    • 谢谢@glitch。根据您指出的链接,“并行选项要记住的重要一点是:并发发生在同一个JVM进程中。”。因此,通过定义 1false 我可以为每个测试类获得一个新的 JVM,但是如果我还包括 methods10 threadCount> 我只有 10 个测试方法在 同一个 JVM 上同时执行,而不是每个测试方法都在新的 JVM 上执行。对吗?
    • 是的,classesAndMethods 表示您的并行化意图,forkCount 限制了并发的扩展。
    • 谢谢,但这不是我要找的。我想在新的 JVM 上运行每个测试方法,而不是在同一个 JVM 上的另一个线程上。
    • @josecampos 我在澄清后更新了我的答案:“我想在新的 JVM 上运行每个测试方法,而不是在同一个 JVM 上的另一个线程上”
    • 我完全同意您的“编辑 1”:在新的 JVM 上运行每个测试方法会非常昂贵,而且正如您所说,这样做也可能会产生一些不需要的副作用。而且我也同意,如果测试方法确实需要隔离执行(即在新的 JVM 上),它们很可能需要重新编写。我只是想知道我的问题是否有答案(即 sufire 选项),而不是我真正需要或想要实现这样的事情。
    猜你喜欢
    • 2013-06-13
    • 2011-02-22
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-19
    相关资源
    最近更新 更多