jacoco + junit 5 是最稳定易集成的组合,但覆盖率报告大片红色通常因 jacoco-maven-plugin 未生效或测试未真正执行;需确保 junit 5 双依赖(junit-jupiter 和 junit-jupiter-engine)齐全、jacoco 插件两个 execution 块完整绑定 test 阶段,并在 idea 中手动切换 coverage runner 为 jacoco 且启用 tracing。

JaCoCo + JUnit 5 是当前 Java 项目中最稳定、最易集成的组合,Maven 默认能自动识别 @Test 方法并触发覆盖率采集;但如果你看到覆盖率报告里大片红色,大概率不是没写测试,而是 jacoco-maven-plugin 没生效,或测试没真正跑起来。
确认 JUnit 版本和依赖是否匹配
JUnit 4 和 JUnit 5 的注解、断言、生命周期方法完全不同,混用会导致测试不执行、@BeforeEach 失效、甚至 ClassNotFoundException。Maven 中必须显式声明 JUnit 5 的两个核心依赖:
-
junit-jupiter(含@Test、@BeforeEach等) -
junit-jupiter-engine(供 Surefire 执行器识别)
只加 junit(即 JUnit 4)或只加 junit-jupiter 而漏掉 engine,都会让测试“静默失败”——控制台显示“0 tests executed”。检查 mvn test 输出末尾是否有类似 Tests run: 3, Failures: 0, Errors: 0, Skipped: 0 的统计行,没有就说明根本没识别到测试类。
JaCoCo 插件配置必须绑定到 test 阶段
常见错误是只写了 prepare-agent,却忘了配 report 执行目标,结果生成了 .exec 文件但没转成 HTML 报告。正确配置要确保两个 execution 块都存在且 phase 明确:
<plugin><groupid>org.jacoco</groupid><artifactid>jacoco-maven-plugin</artifactid><version>0.8.12</version><executions><execution><id>prepare-agent</id><goals><goal>prepare-agent</goal></goals></execution><execution><id>report</id><phase>test</phase><goals><goal>report</goal></goals></execution></executions></plugin>
注意:report 的 <phase>test</phase> 不可省略。若写成 verify 或漏掉,执行 mvn test 后不会生成 target/site/jacoco/ 下的 HTML 报告。
IntelliJ IDEA 中运行带覆盖率的测试必须选对引擎
IDEA 默认使用自带的覆盖率引擎,它不解析 JaCoCo 的 .exec 文件,也不支持分支覆盖率(黄色菱形标记)。要看到和 Maven 报告一致的结果,必须手动切换:
- 进入
Run → Edit Configurations… → Templates → JUnit → Code Coverage - 将
Coverage runner改为JaCoCo - 勾选
Tracing(否则 switch/case、三元运算符等会被误判为未覆盖)
改完后,右键测试类 → Run 'XxxTest' with Coverage,编辑器内才会按 JaCoCo 规则高亮:绿色=全行执行+分支全走,黄色=仅部分分支执行,红色=整行未进。
覆盖率低往往卡在边界值和异常路径上
比如一个分数分级方法 scoreLevel(int score),只测 scoreLevel(85) 得到 “良”,覆盖不了 if(score 分支和 <code>throw IllegalArgumentException 路径。真实提升覆盖率的关键动作是:
- 对每个
if/else if分支,补一个触发该分支的输入(如-1、0、59、60、89、90) - 用
@Test(expected = IllegalArgumentException.class)或assertThrows显式验证异常路径 - 集合类方法必须覆盖空集合、单元素、多元素三种场景
JaCoCo 报告里的 “Missed branches” 数字比 “Missed lines” 更值得盯——它直接指出哪些 if 条件的 true/false 没跑全,这才是补测试用例的精确导航图。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











