用于集成测试的多模块maven jacoco设置

时间:2018-12-04 13:54:18

标签: java maven sonarqube integration-testing jacoco

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

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

Jacoco正在根据单元测试正确生成测试覆盖率,而声纳显示正确的百分比(比如说20%)。 Surefire用于单元测试。

对于集成测试而言,它比较棘手,我们使用故障保护,集成测试生成jacoco-it.exec文件,该文件由声纳扫描。我的问题是集成测试位于controllers module中,它仅显示控制器内部类上的集成测试的测试范围,而不显示其他模块(如服务模块)中的类的集成测试的测试范围。由于集成测试的总体测试覆盖率增加到了21%,而不是35 +%。

如果集成测试位于controllers module中,是否可以将声纳和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运行扫描程序

1 个答案:

答案 0 :(得分:2)

您可以通过将覆盖率报告全部写入同一目标文件来汇总它们。

例如,我们目前仅在多模块项目中介绍单元测试,因此我们的父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配置。