目录
3.1 Ant Tasks —— Apache Ant 方式
3.3 Maven Plug-in —— Apache Maven 方式
参考资料:
1. JaCoCo 简介
JaCoCo Java Code Coverage Library
JaCoCo is a free code coverage library for Java, which has been created by the EclEmma team based on the lessons learned from using and integration existing libraries for many years.

是一个免费的Java代码覆盖库。
JaCoCo包含了多种尺度的覆盖率计数器,包含指令级覆盖(Instructions,C0coverage),分支(Branches,C1coverage)、圈复杂度(CyclomaticComplexity)、行覆盖(Lines)、方法覆盖(non-abstract methods)、类覆盖(classes)。

- 标示绿色的为行覆盖充分
- 标红色的为未覆盖的行
- 黄色菱形的为分支部分覆盖
- 绿色菱形为分支完全覆盖
2. JaCoCo 原理
Jacoco使用插桩的方式来记录覆盖率数据,是通过一个probe探针来注入。
插桩模式有两种:
2.1 on-the-fly模式
JVM通过 -javaagent参数指定jar文件启动代理程序,代理程序在ClassLoader装载一个class前判断是否修改class文件,并将探针插入class文件,探针不改变原有方法的行为,只是记录是否已经执行。
2.2 offline模式
在测试之前先对文件进行插桩,生成插过桩的class或jar包,测试插过桩的class和jar包,生成覆盖率信息到文件,最后统一处理,生成报告。
2.3 on-the-fly和offline对比
on-the-fly更方便简单,无需提前插桩,无需考虑classpath设置问题。
以下情况不适合使用on-the-fly模式:
(1)不支持javaagent
(2)无法设置JVM参数
(3)字节码需要被转换成其他虚拟机
(4)动态修改字节码过程和其他agent冲突
(5)无法自定义用户加载类
3. JaCoCo 使用

3.1 Ant Tasks —— Apache Ant 方式
参见 https://www.eclemma.org/jacoco/trunk/doc/ant.html
3.2 Java Agent —— 命令行方式
参见
http://www.eclemma.org/jacoco/trunk/doc/agent.html
https://www.jacoco.org/jacoco/trunk/doc/cli.html
3.2.1 官方介绍
JaCoCo使用class文件插桩来记录执行覆盖率数据。class文件是使用Java代理(Java agent)动态检测的。这种机制允许在类加载期间独立于应用程序框架对所有类文件进行内存预处理。
JaCoC

JaCoCo是一款免费的Java代码覆盖率工具,提供多种覆盖率指标,如指令、分支、行覆盖等。它通过插桩技术动态或静态地注入探针来收集覆盖率数据。JaCoCo支持on-the-fly和offline两种模式,前者适用于大多数场景,后者在特定情况下更适用。在实际使用中,JaCoCo可以通过Ant Tasks、JavaAgent、Maven插件、Eclipse插件和Jenkins集成等方式进行集成。通过命令行参数配置,例如-JavaAgent,可以指定JaCoCo的输出模式和数据文件。生成的覆盖率报告可以帮助开发者了解代码的测试覆盖情况。
最低0.47元/天 解锁文章
8万+





