简介
jacoco是一个能跑覆盖率的工具,可以把覆盖率结果生成报告,和IDEA自带的覆盖率测试工具类似,eclipse是没有自带覆盖率测试功能的,jacoco可以在maven 执行test周期的时候生成数据,可以作为eclipse覆盖率测试工具,jacoco生成的报告可以和sonaqube,jenkin,gitlab等工具联动,实现代码门禁的效果。
在maven里面使用jacoco
<!--jaCoCo覆盖率测试依赖-->
<dependency>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.3</version>
</dependency>
插件依赖
<!--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就能看到报告
报告查看
点击index.html查看报告
第一排是Element是包名,点进去是类名,在下面是方法,在点下去是具体代码的覆盖情况,外层包统计的是包类所有数据。
覆盖率测试常用的两个指标,代码行覆盖率和分支覆盖率,一般要求行覆盖率80%,分支覆盖率100%。
代码覆盖率放映测试用例对代码的覆盖情况,和代码质量没有严格的关系,但是可以很大程度避免避免代码缺陷,不管是静态代码检查,还是动态覆盖率,目的都是规范开发流程,劲量避免低级错误。
报告不生成问题
如果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.
原因是没有找到可以扫描的类,大概是因为配置扫描规则的时候所有类都没匹配上
<!--包含的类,可以不写,不能写错,匹配的src/main/java下面的目录 -->
<includes>
<include>src/**</include>
</includes>
标签:报告,覆盖率,代码,生成,test,测试工具,jacoco
From: https://www.cnblogs.com/cxygg/p/18011230