jacoco覆盖率测试工具

简介

jacoco是一个能跑覆盖率的工具,可以把覆盖率结果生成报告,和IDEA自带的覆盖率测试工具类似,eclipse是没有自带覆盖率测试功能的,jacoco可以在maven 执行test周期的时候生成数据,可以作为eclipse覆盖率测试工具,jacoco生成的报告可以和sonaqube,jenkin,gitlab等工具联动,实现代码门禁的效果。

在maven里面使用jacoco

插件依赖

 <!--JaCoCo覆盖率测试工具-->
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.8.11</version>
                <configuration>
                    <!--包含的类-->
                    <includes>
						<!--相对src/main/java下的目录-->
                        <include>com/**</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>

生成报告

运行mvn test后会在target\site\jacoco目录下生成报告文件

运行index.html就能看到报告

image-20240207203337258

报告查看

点击index.html查看报告
第一排是Element是包名,点进去是类名,在下面是方法,在点下去是具体代码的覆盖情况,外层包统计的是包类所有数据。
覆盖率测试常用的两个指标,代码行覆盖率和分支覆盖率,一般要求行覆盖率80%,分支覆盖率100%。
代码覆盖率放映测试用例对代码的覆盖情况,和代码质量没有严格的关系,但是可以很大程度避免避免代码缺陷,不管是静态代码检查,还是动态覆盖率,目的都是规范开发流程,劲量避免低级错误。

image-20240207211335258

报告不生成问题

​ 如果pom.xml里面配置了跳过junit测试,那么不会生成报告文件夹


    <!-- 跳过测试 -->
    <properties>
        <!-- 跳过测试,跳过后不会jaCoCo 不会执行 -->         
        <!--<skipTests>true</skipTests>-->

        <!--版本-->
        <java.version>1.8</java.version>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>

        <!--编译编码-->
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

如果生成了报告目录,但是index.html显示No class files specified.

image-20240207203736924

image-20240207170956229

原因是没有找到可以扫描的类,大概是因为配置扫描规则的时候所有类都没匹配上

<!--包含的类,可以不写,不能写错,匹配的src/main/java下面的目录 -->
<includes>
    <include>src/**</include>
</includes>

posted on 2024-02-07 19:38  zhangyukun  阅读(128)  评论(0编辑  收藏  举报

导航