maven surefire插件可以在直接调用时运行多个测试执行吗? (声纳+詹金斯没有运行所有单元测试)

时间:2014-03-31 00:25:43

标签: unit-testing maven jenkins sonarqube maven-surefire-plugin

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

<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 test

时运行正常
$ 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 执行而不是 default-test + unitTests ,因为(我假设)surefire插件是通过mvn surefire:test直接调用,而不是通过mvn test生命周期调用。

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

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

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

1 个答案:

答案 0 :(得分:0)

  

我认为也许我的Jenkins设置应该更改,以便   单元测试在正常的生成操作中运行,生成代码   覆盖率报告,然后将Sonar插件作为构建后版本运行   操作并加载这些报告以进行分析。

这似乎是个好主意。您可以使用maven profiles来执行此操作。您可以在不同的配置文件中配置surefire插件,并在默认情况下启用您希望工具使用的插件。