单元测试 – maven surefire插件可以在直接调用时运行多个测试执行吗? (Sonar Jenkins没有运行所有单元测试)

我有一个使用surefire插件进行单元测试的maven项目.目前测试分为两个执行default-test和unitTests,两者都绑定到测试目标,如下所示:

<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <executions>
      <!-- Test one set of files -->
      <execution>
        <id>default-test</id>
        <goals>
          <goal>test</goal>
        </goals>
        <configuration>
          <includes> ... </includes>
        </configuration>
      </execution>
      <!-- Test a different set of files -->
      <execution>
        <id>unitTests</id>
        <goals>
          <goal>test</goal>
        </goals>
        <configuration>
          <includes> ... </includes>
        </configuration>
      <execution>
    </executions>
  </plugin>
</plugins>

这在运行mvn测试时工作正常:

$mvn test
...
[INFO] maven-surefire-plugin:2.13:test (default-test)
...
[INFO] maven-surefire-plugin:2.13:test (unitTests)

我在Jenkins上使用Sonar插件生成代码指标,Jenkins的设置如下:

>运行构建操作mvn clean install -DskipTests
>运行Sonar插件作为构建后动作

这意味着Sonar插件运行单元测试,单元测试仅运行一次.当Sonar插件运行时,我看到以下输出:

[INFO] maven-surefire-plugin:213:test (default-cli) 

请注意,只调用default-cli执行而不是默认测试unitTests,因为(我假设)通过mvn surefire:test而不是通过mvn测试生命周期直接调用surefire插件.

我可以向POM文件添加default-cli执行,并从默认测试执行中复制配置,但这只会运行一组单元测试.在unitTests执行中配置的单元测试根本不运行,即使该执行绑定到同一目标.

当Sonar插件调用mvn surefire:test时,如何确保调用default-cli和unitTests执行?

我想也许我的Jenkins设置应该改变,以便单元测试在正常构建操作中运行,生成代码覆盖率报告,然后Sonar插件作为构建后操作运行并加载这些报告以执行分析.不确定这是否可行,或者我的POM文件需要做哪些更改才能支持这一点(希望对POM文件进行最小的更改是另一个目标).

最佳答案

I am thinking that perhaps my Jenkins setup should change, so that the
unit tests are run in the normal build action, which generates code
coverage reports, and then the Sonar plugin runs as a post-build
action and loads these reports to perform analysis.

这似乎是一个好主意.您可以使用maven profiles来执行此操作.您可以在不同的配置文件中配置surefire插件,并默认使您希望工具使用的插件处于活动状态.

转载注明原文:单元测试 – maven surefire插件可以在直接调用时运行多个测试执行吗? (Sonar Jenkins没有运行所有单元测试) - 代码日志