在Sonar槽maven进行IT测试

时间:2017-11-27 11:20:34

标签: java maven sonarqube code-coverage jacoco

Gooday, 我正试图让我的IT进入声纳的测试覆盖范围。我有一个多模块项目,我希望这适用于所有模块。因此,只要我通过文档得到它,我就找到了:

但是当我运行它时,测试似乎有0%,所以显然我做错了。一些人在我做错的地方穿上它会很不错。

我的主要Pom:

{% if user.address %}
        <tr>
           {% for key, address in user.address %}
                    <td width="25%">
                        {{ key }}
                    </td>
                {%endfor%}
        </tr> 
        <tr>
           {% for address in user.address %}
                {% for parts in address %}
                    <td width="25%">
                        {{ parts }}
                    </td>  
                    {%endfor%}
           {%endfor%}
        </tr>
    {% endif %}

我一整天都在为我的感觉而烦恼,并没有找到明确的答案我做错了什么。所以一些输入会非常有用

1 个答案:

答案 0 :(得分:0)

单元和集成测试的覆盖范围有点脆弱......

您的配置看起来不错。我想可能会发生的是&#34; argLine&#34;属性已被替换或未正确设置为surefire或failsafe插件。如果你用-X运行mvn目标,仔细看看当failafe启动它的值时会发生什么。 argLine应包含jacoco代理以收集覆盖信息。

另一件事:failsafe可能会将覆盖结果写入与surefire相同的jacoco.exec文件中。

我做了什么(不确定它是否是所有方式中最聪明的):将所有内容放在配置文件中并使用jacoco-plugin的自定义属性和覆盖的单独文件,以便声纳报告可以提取它们:

只有当您想知道哪个测试涵盖哪个生产代码时,才需要声纳-jacoco-listeners。在声纳中,然后在绿色条中显示哪些测试称为代码。

除此之外:

pom有一些属性:

    <surefire.jvm.args></surefire.jvm.args>
    <failsafe.jvm.args></failsafe.jvm.args>
    <jacoco.append>true</jacoco.append>
</properties>

如果需要,可以设置这些,并且配置使用自己的属性不与argLine冲突(这是surefire和failsafe的默认设置)

sonar.jacoco.reportPath可用于为所有maven模块编写一个文件,以防某些集成测试位于不同的模块中,并且您也想测量覆盖范围(代码不太好,但很好) ......现实和东西):

<sonar.jacoco.itReportPath>${project.basedir}/../target/jacoco-it.exec</sonar.jacoco.itReportPath>

这是我的承保资料:(采用包括:my / packages / *模式如下!)

 <profile>
        <dependencies>
            <dependency>
                <groupId>org.codehaus.sonar-plugins.java</groupId>
                <artifactId>sonar-jacoco-listeners</artifactId>
                <version>3.2</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.jacoco</groupId>
                    <artifactId>jacoco-maven-plugin</artifactId>
                    <version>${jacoco.version}</version>
                    <executions>
                        <!-- prepare configuration for surefire tests -->
                        <execution>
                            <id>prepare-agent</id>
                            <phase>initialize</phase>
                            <goals>
                                <goal>prepare-agent</goal>
                            </goals>
                            <configuration>
                                <destFile>${sonar.jacoco.reportPath}</destFile>
                                <propertyName>jacoco.agent.argLine</propertyName>
                                <append>true</append>
                            </configuration>
                        </execution>
                        <!-- prepare configuration for failsafe integration tests -->
                        <execution>
                            <id>prepare-agent-integration</id>
                            <phase>pre-integration-test</phase>
                            <goals>
                                <goal>prepare-agent-integration</goal>
                            </goals>
                            <configuration>
                                <destFile>${sonar.jacoco.itReportPath}</destFile>
                                <propertyName>jacoco.agent.it.argLine</propertyName>
                                <append>true</append>
                            </configuration>
                        </execution>
                    </executions>
                    <configuration>
                        <includes>
                            <include>my/packages/*</include>
                        </includes>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <configuration>
                        <properties>
                            <property>
                                <name>listener</name>
                                <value>org.sonar.java.jacoco.JUnitListener</value>
                            </property>
                        </properties>
                        <argLine>${jacoco.agent.argLine} ${surefire.jvm.args}</argLine>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-failsafe-plugin</artifactId>
                    <configuration>
                        <argLine>${jacoco.agent.it.argLine} ${failsafe.jvm.args}</argLine>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>

所以原理是一样的,将jacoco代理设置在正确的阶段并运行测试。我认为jacoco代理没有正确设置,或者你的argLine与构建过程中发生的事情冲突。