用于集成测试的多模块 Maven jacoco 设置
Multi-module maven jacoco setup for integration tests
我有多个模块的 Maven 设置,设置看起来像这样
root module
- domain module
- repository module
- service module
- controllers module
Jacoco 正确地从单元测试中生成了测试覆盖率,并且声纳显示了正确的百分比(假设为 20%)。 Surefire 用于单元测试。
对于集成测试它更棘手,我们使用故障安全和集成测试生成 jacoco-it.exec
文件,该文件由声纳扫描。我的问题是集成测试位于 controllers module
中,它只显示控制器内部 类 上集成测试的测试覆盖率,而不显示另一个模块(如服务模块)中的 类 上的集成测试覆盖率.由于集成测试的总体测试覆盖率增加到 21% 而不是 35+%。
是否可以配置 sonar 和 jacoco 以通过 所有 类 的集成测试而不是仅来自同一模块的 类 的集成测试来测量测试覆盖率,如果集成测试在 controllers module
?
供参考,这是相关设置
<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
进行扫描
您可以通过将覆盖率报告全部写入同一个目标文件来汇总它们。
例如,我们目前只在多模块项目中覆盖单元测试,所以我们的父 pom 包含:
<properties>
...
<sonar.jacoco.reportPath>${project.basedir}/../target/jacoco.exec</sonar.jacoco.reportPath>
...
</properties>
和
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<configuration>
<destFile>${sonar.jacoco.reportPath}</destFile>
<append>true</append>
</configuration>
<inherited>true</inherited>
<executions>
<execution>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
</executions>
</plugin>
这会生成所有模块的单一汇总报告。
我希望类似的模式可以应用于您的 jacoco IT 配置。
我有多个模块的 Maven 设置,设置看起来像这样
root module
- domain module
- repository module
- service module
- controllers module
Jacoco 正确地从单元测试中生成了测试覆盖率,并且声纳显示了正确的百分比(假设为 20%)。 Surefire 用于单元测试。
对于集成测试它更棘手,我们使用故障安全和集成测试生成 jacoco-it.exec
文件,该文件由声纳扫描。我的问题是集成测试位于 controllers module
中,它只显示控制器内部 类 上集成测试的测试覆盖率,而不显示另一个模块(如服务模块)中的 类 上的集成测试覆盖率.由于集成测试的总体测试覆盖率增加到 21% 而不是 35+%。
是否可以配置 sonar 和 jacoco 以通过 所有 类 的集成测试而不是仅来自同一模块的 类 的集成测试来测量测试覆盖率,如果集成测试在 controllers module
?
供参考,这是相关设置
<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
您可以通过将覆盖率报告全部写入同一个目标文件来汇总它们。
例如,我们目前只在多模块项目中覆盖单元测试,所以我们的父 pom 包含:
<properties>
...
<sonar.jacoco.reportPath>${project.basedir}/../target/jacoco.exec</sonar.jacoco.reportPath>
...
</properties>
和
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<configuration>
<destFile>${sonar.jacoco.reportPath}</destFile>
<append>true</append>
</configuration>
<inherited>true</inherited>
<executions>
<execution>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
</executions>
</plugin>
这会生成所有模块的单一汇总报告。
我希望类似的模式可以应用于您的 jacoco IT 配置。