在声纳中获得正确的覆盖范围,以便在单独的maven模块中进行单元和集成测试

时间:2017-08-18 18:06:36

标签: java maven sonarqube integration-testing code-coverage

我的项目设置很简单(所有来源均可在github处获得):


↳后端
↳客户
↳集成测试

跑完maven之后:

mci sonar:sonar -Dsonar.host.url=http://localhost:9000 -Dsonar.login=12...9

我看到声纳可以看到单元和集成测试,但IT的覆盖范围却没有。 sonar coverage sonar coverage detailed

对于Intelij IDEA jacoco-it.exec看起来很好: idea coverage

我假设罪魁祸首在这里:

[INFO] Sensor JaCoCoSensor [java]
[INFO] No JaCoCo analysis of project coverage can be done since there is no class files.
[INFO] Sensor JaCoCoSensor [java] (done) | time=1ms

所以我做了小hack(简而言之:将所有源文件复制到integration-test模块):

    <properties>
        <sonar.sources>${basedir}/target/copied</sonar.sources>
    </properties>
    [...]
        <!-- hack to generate coverage reports -->
        <plugin>
            <artifactId>maven-resources-plugin</artifactId>
            <version>${maven-resources-plugin.version}</version>
            <executions>
                <execution>
                    <id>copy-resources</id>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>copy-resources</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${sonar.sources}</outputDirectory>
                        <resources>
                            <resource>
                                <directory>${basedir}/../backend/src/main/java</directory>
                                <filtering>false</filtering>
                            </resource>
                        </resources>
                    </configuration>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>build-helper-maven-plugin</artifactId>
            <executions>
                <execution>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>add-source</goal>
                    </goals>
                    <configuration>
                        <sources>
                            <source>${sonar.sources}</source>
                        </sources>
                    </configuration>
                </execution>
            </executions>
        </plugin>

但是现在我所有的课程都重复了(声纳显示来自../target/copied dir的课程): sonar coverage duplicated

声纳版本:6.5
Jacoco maven插件:0.7.5.201505241946(也试过最新的0.7.9)

任何想法我应该在这做什么?

2 个答案:

答案 0 :(得分:3)

看起来我已经回答了这个问题:

  1. 由于post-unit-test执行处于错误阶段,因此未生成报告。而不是<phase>test</phase>我现在有<phase>verify</phase>

  2. post-integration-test的目标错误。更改时间从<goal>report-integration</goal><goal>report-aggregate</goal>

    • This goal允许我在测试与待测代码分开的项目中创建覆盖率报告。
  3. 添加了属性: <jacoco.itReportPath>${project.basedir}/../integrations-tests/target/jacoco-it.exec</jacoco.itReportPath><sonar.jacoco.reportPaths>${jacoco.itReportPath},${project.build.directory}/jacoco-it.exec,${project.build.directory}/jacoco.exec</sonar.jacoco.reportPaths>

  4. github

    上提供的所有这些chages和更新项目

答案 1 :(得分:-1)

我主要使用jacoco进行报道。在开始之前,你需要做一些事情

  1. 启用并配置surefire插件
  2. 启用并配置jacoco插件
  3. 这是您将构建并忘记的一次性配置,我的一个项目作为父项启用此功能。随意查看: https://github.com/slixes/parent/blob/master/pom.xml