我有一个使用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插件运行时,我看到以下输出:
[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文件进行最小的更改是另一个目标)。
答案 0 :(得分:0)
我认为也许我的Jenkins设置应该更改,以便 单元测试在正常的生成操作中运行,生成代码 覆盖率报告,然后将Sonar插件作为构建后版本运行 操作并加载这些报告以进行分析。
这似乎是个好主意。您可以使用maven profiles来执行此操作。您可以在不同的配置文件中配置surefire插件,并在默认情况下启用您希望工具使用的插件。