我有一个使用surefire插件进行单元测试的maven项目.目前测试分为两个执行default-test和unitTests,两者都绑定到测试目标,如下所示:
org.apache.maven.plugins maven-surefire-plugin default-test test ... unitTests test ...
这在运行时工作正常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执行,并从默认测试执行中复制配置,但这只会运行一组单元测试.在unitTests
执行中配置的单元测试根本不运行,即使该执行绑定到相同的目标.
如何在Sonar插件调用时确保调用default-cli和unitTests执行mvn surefire:test
?
我想也许我的Jenkins设置应该改变,以便单元测试在正常构建操作中运行,生成代码覆盖率报告,然后Sonar插件作为构建后操作运行并加载这些报告以执行分析.不确定这是否可行,或者我的POM文件需要做哪些更改才能支持这一点(希望对POM文件进行最小的更改是另一个目标).