【发布时间】:2014-05-10 05:07:51
【问题描述】:
我有一个使用 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 生命周期。
我可以在 POM 文件中添加一个 default-cli 执行,并从 default-test 执行中复制配置,但这只会运行一组单元测试。 unitTests 执行中配置的单元测试根本不会运行,即使该执行绑定到同一个目标。
如何确保在 Sonar 插件调用 mvn surefire:test 时同时调用 default-cli 和 unitTests 执行?
我在想也许我的 Jenkins 设置应该改变,以便单元测试在正常的构建操作中运行,生成代码覆盖率报告,然后 Sonar 插件作为构建后操作运行并将这些报告加载到进行分析。不确定这是否可行,或者需要对我的 POM 文件进行哪些更改才能支持这一点(希望对 POM 文件进行最小的更改是另一个目标)。
【问题讨论】:
标签: unit-testing maven jenkins sonarqube maven-surefire-plugin