一、Jacoco+AI提升覆盖率方法,其实和我前面讲AI测试流程的帖子类似,最终功劳都是AI的
- Jacoco 找出没覆盖的代码 → 喂给 AI 让它补测 → 再跑 Jacoco 验证
| 指标 | 含义 | 实战价值 |
|---|---|---|
| 行覆盖 (Line) | 哪几行被执行了 | 最直观,汇报用 |
| 分支覆盖 (Branch) | if/else、三元、switch 的每个分支走没走到 | 真正能暴露 bug 的指标 |
| 方法/类覆盖 | 方法、类有没有被调用 | 找完全没测的死角 |
二、Jacoco工作原理
-
Jacoco 不解析你的源码,它在 JVM 加载 class 时往字节码里插探针 (probe),运行时记录每个探针有没有被执行,最后生成报告。

关键产物两个: -
jacoco.exec:二进制执行数据,机器读的
-
report/jacoco.xml + index.html:前者给 AI/CI 解析,后者给人看(红=没覆盖,绿=覆盖了)
三、Maven 接入
pom.xml 加这一段就够了(直接copy吧):
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.12</version>
<executions>
<!-- 1. test 前挂上 agent,做插桩 -->
<execution>
<id>prepare-agent</id>
<goals><goal>prepare-agent</goal></goals>
</execution>
<!-- 2. test 后生成报告 -->
<execution>
<id>report</id>
<phase>test</phase>
<goals><goal>report</goal></goals>
</execution>
</executions>
</plugin>
四、AI补覆盖率

第 1 步:让 AI 知道「哪没覆盖」。 别直接丢整个类,信息量太大效果差。从 jacoco.xml 里挑出 missed 大于 0 的方法:
<method name="calculateDiscount" desc="...">
<counter type="BRANCH" missed="3" covered="1"/>
<counter type="LINE" missed="5" covered="2"/>
</method>
missed="3"
说明这个方法有 3 个分支没测到——这就是线索。
第 2 步:给 AI 一个结构化的 prompt。 模板照抄:
下面是一个 Java 方法,Jacoco 显示它有 3 个分支未覆盖。
请用 JUnit 5 + Mockito 写测试,要求:
- 覆盖所有 if/else 分支和边界值(null、空、0、负数、上下界)
- 每个测试方法名说明测的是哪个场景
- 用 @ParameterizedTest 合并相似 case
- 只输出测试代码
[粘贴方法源码 + 它依赖的 DTO/常量]
第 3 步:跑 → 修 → 再跑。 AI 生成的测试不可能一次全过(import 缺、mock 写错很常见)。把报错原样回贴给 AI,它一般两轮内能修好。这一步千万别省——没跑通的测试等于没写。
第 4 步:用 Jacoco 验证,这是闭环的命门。 AI 说覆盖了不算数,重新 mvn clean test 看报告里那几行变绿没。变绿了再提交。
一句话总结:
Jacoco 负责精准告诉你「哪没测」,AI 负责把「补测」这件枯燥的体力活干掉,你只需要做最有价值的 review。这套组合拳,值得在团队里推一下。