jacoco 和 maven 集成

  • Post author:
  • Post category:其他


2.1 mvn 命令增加参数

在执行 mvn 命令时,加上 “org.jacoco:jacoco-maven-plugin:prepare-agent” 参数即可。示例:

mvn clean test org.jacoco:jacoco-maven-plugin:0.8.5:prepare-agent install -Dmaven.test.failure.ignore=true

其中,jacoco-maven-plugin 后面跟的是jacoco的版本。”-Dmaven.test.failure.ignore=true” 建议加上,否则如果单元测试失败,就会直接中断,不会产生 .exec 文件。

执行以上命令后,会在当前目录的 target 目录下产生一个jacoco.exec文件,该文件就是覆盖率的文件。

总体说来,这种方式比较简单,在与 jenkins 集成时也非常方便。

2.2 在 pom 文件中使用 jacoco 插件

首先,需要添加 jacoco 的依赖:

<properties>
    <jacoco.version>0.8.5</jacoco.version>
</properties>
<dependency>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>${jacoco.version}</version>
    <scope>test</scope>
</dependency>

接着,我们需要配置 jacoco-maven-plugin 和 maven-surefire-plugin 内容:

    <plugins>
        <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <argLine>
                    -javaagent:${settings.localRepository}/org/jacoco/org.jacoco.agent/${jacoco.version}/org.jacoco.agent-${jacoco.version}-runtime.jar=destfile=${project.basedir}/target/coverage-reports/jacoco-unit.exec
                </argLine>
                <testFailureIgnore>true</testFailureIgnore>
            </configuration>
        </plugin>
        <!--检查代码覆盖率的插件配置-->
        <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>0.8.5</version>
            <configuration>
                <!--指定生成.exec文件的存放位置-->
                <destFile>target/coverage-reports/jacoco-unit.exec</destFile>
                <!--Jacoco是根据.exec文件生成最终的报告,所以需指定.exec的存放路径-->
                <dataFile>target/coverage-reports/jacoco-unit.exec</dataFile>
                <includes>
                    <include>**/service/**</include>
                </includes>
                <!-- rules里面指定覆盖规则 -->
                <rules>
                    <rule implementation="org.jacoco.maven.RuleConfiguration">
                        <element>BUNDLE</element>
                        <limits>  
                            <!-- 指定方法覆盖到50% -->
                            <limit implementation="org.jacoco.report.check.Limit">
                                <counter>METHOD</counter>
                                <value>COVEREDRATIO</value>
                                <minimum>0.50</minimum>
                            </limit>
                            <!-- 指定分支覆盖到50% -->
                            <limit implementation="org.jacoco.report.check.Limit">
                                <counter>BRANCH</counter>
                                <value>COVEREDRATIO</value>
                                <minimum>0.50</minimum>
                            </limit>
                            <!-- 指定类覆盖到100%,不能遗失任何类 -->
                            <limit implementation="org.jacoco.report.check.Limit">
                                <counter>CLASS</counter>
                                <value>MISSEDCOUNT</value>
                                <maximum>0</maximum>
                            </limit>
                        </limits>
                    </rule>
                </rules>
            </configuration>
            <executions>
                <execution>
                    <id>pre-test</id>
                    <goals>
                        <goal>prepare-agent</goal>
                    </goals>
                </execution>
                <execution>
                    <id>post-test</id>
                    <phase>test</phase>
                    <goals>
                        <goal>report</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>

或标签的值应该是相对于目录 /classes/ 的编译类的类路径(而不是包名),用来指定哪些类需要进行单元测试。

另外 maven 的测试类需要遵循相应的规范命名,否则无法运行测试类,无法生成测试报告以及覆盖率报告。jacoco 使用的是 maven-surefire-plugin 插件,它的默认测试类名规范是:

Test*.java:以 Test 开头的 Java 类;

*Test.java:以 Test 结尾的 Java 类;

*TestCase.java:以 TestCase 结尾的 Java 类;

或者可以在pom中自定义测试类:

org.apache.maven.plugins maven-surefire-plugin **/*Tests.java **/*Test.java **/Abstract*.java 亚马逊测评 www.yisuping.com