JaCoCo

JaCoCo(Java Code Coverage)是Java代码覆盖率分析工具,用来统计:

  • 哪些代码被执行了
  • 哪些代码没有执行
  • 覆盖率百分比是多少

JaCoCo一般与JUint+Maven/Gradle一起使用,生成HTML报告

主要适合:

  • 软件测试实验
  • Java项目
  • 单元测试覆盖率分析
覆盖类型 含义
Line Coverage(行覆盖) 哪些代码行被执行
Branch Coverage(分支覆盖) if/else/switch的分支覆盖情况
Instruction Coverage(指令覆盖) JVM字节码层面更细粒度的覆盖率
Method Coverage(方法覆盖) 调用了哪些方法
Class Coverage(类覆盖) 多少类被执行测试

Maven项目中使用JaCoCo示例

  • pom.xml添加插件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<build>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.11</version>

<executions>
<!-- 运行测试时自动生成覆盖率数据 -->
<execution>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>

<!-- 测试后生成报告 -->
<execution>
<id>report</id>
<phase>test</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>

</plugin>
</plugins>
</build>
  • 运行时测试生成覆盖率

在项目根目录执行:

1
mvn test

之后会生成:

1
target/site/jacoco/index.html

用浏览器打开即可查看覆盖率报告

  • 运行时覆盖率报告示例

HTML报告中通常包含:

指标 含义
Missed Instructions 未执行的字节码指令数量
Cov.(覆盖率%) 覆盖比例
Missed Branches if/else未覆盖的分支
Total Lines 总行数
Methods 方法数
Classes 类数量

颜色含义:
绿色:已覆盖
红色:未覆盖
黄色:覆盖部分(比如只走了if,没有走else)