我已经设置了多个模块的Maven,设置看起来像这样:
Jacoco能够正确地生成单元测试的测试覆盖率,Sonar显示的百分比也是正确的(假设为20%)。我们使用Surefire进行单元测试。
对于集成测试,情况就有些棘手了。我们使用Failsafe,并且集成测试会生成“jacoco-it.exec”文件,该文件将被Sonar扫描。我的问题是,集成测试位于“controllers module”中,它只会显示位于控制器内的集成测试的测试覆盖率,而不是其他模块中的类,例如服务模块中的类。因此,整体的测试覆盖率包括集成测试仅增加到21%,而不是35%以上。
如果集成测试位于“controllers module”中,则可能配置Sonar和Jacoco以测量所有类的集成测试的测试覆盖率,而不仅仅是同一模块中的类。
以下是相关设置的参考资料。
root module
- domain module
- repository module
- service module
- controllers module
Jacoco能够正确地生成单元测试的测试覆盖率,Sonar显示的百分比也是正确的(假设为20%)。我们使用Surefire进行单元测试。
对于集成测试,情况就有些棘手了。我们使用Failsafe,并且集成测试会生成“jacoco-it.exec”文件,该文件将被Sonar扫描。我的问题是,集成测试位于“controllers module”中,它只会显示位于控制器内的集成测试的测试覆盖率,而不是其他模块中的类,例如服务模块中的类。因此,整体的测试覆盖率包括集成测试仅增加到21%,而不是35%以上。
如果集成测试位于“controllers module”中,则可能配置Sonar和Jacoco以测量所有类的集成测试的测试覆盖率,而不仅仅是同一模块中的类。
以下是相关设置的参考资料。
<sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
<sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
...
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.9</version>
<executions>
<execution>
<id>pre-unit-test</id>
<goals>
<goal>prepare-agent</goal>
</goals>
<configuration>
<destFile>${project.build.directory}/jacoco.exec</destFile>
<propertyName>surefireArgLine</propertyName>
</configuration>
</execution>
<execution>
<id>pre-integration-test</id>
<phase>pre-integration-test</phase>
<goals>
<goal>prepare-agent</goal>
</goals>
<configuration>
<destFile>${project.build.directory}/jacoco-it.exec</destFile>
<propertyName>failsafeArgLine</propertyName>
</configuration>
</execution>
</executions>
</plugin>
我使用mvn verify
来运行测试,并使用mvn sonar:sonar
扫描器。
<append>true</append>
并写在根模块中。谢谢 @Steve C - Bojan Trajkovski<sonar.coverage.jacoco.xmlReportPaths>${project.basedir}/../target/coverage-merged.exec</sonar.coverage.jacoco.xmlReportPaths>
,但我应该在我的父POM中添加什么? - Rom