java - 用于集成测试的多模块 Maven jacoco 设置

标签 java maven sonarqube integration-testing jacoco

我有多个模块的 maven 设置,设置看起来像这样

root module
  - domain module 
  - repository module 
  - service module 
  - controllers module

Jacoco 从单元测试中正确生成了测试覆盖率,并且 Sonar 显示了正确的百分比(假设为 20%)。 Surefire 用于单元测试。

对于更棘手的集成测试,我们使用故障安全和集成测试生成 jacoco-it.exec 文件,该文件由 Sonar 扫描。我的问题是集成测试位于 controllers module 中,它只显示集成测试对 Controller 内部类的测试覆盖率,而不显示另一个模块(如服务模块)中的类。由于集成测试的总体测试覆盖率从 35+% 增加到 21% 左右。

如果集成测试在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 配置。

关于java - 用于集成测试的多模块 Maven jacoco 设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53614520/

相关文章:

Sonar 与 Sonar 扫描仪

sonarqube - 为 SonarQube 生成虚拟数据

java - Apache Camel 动态消费者

java - Firebase 查询不显示所有数据

java - 如何在满足条件后从循环中跳出

maven - 报告使用 surefire 手动运行测试

java - 尝试部署到 AZURE 时出错无法执行目标 org.apache.maven.plugins :maven-surefire-plugin:2. 22.2:test

maven - -RELEASE 后缀的版本对 Maven 有什么特殊意义(如果有的话)?

c# - 为什么 SonarQube Scanner for MSBuild 不适用于 MSBuild 15.0?

java - 当我们使用 new 运算符时,究竟什么时候在字符串常量池中创建对象。?