jacoco是java最常用轻量级覆盖率工具,核心步骤为运行测试生成.exec文件再生成报告;支持maven命令行、idea实时查看及覆盖异常分支等三种方式。

JaCoCo 是 Java 项目中最常用、最轻量的代码覆盖率分析工具,它不依赖 IDE,但和 Maven/Gradle、IntelliJ IDEA、Eclipse 都能无缝集成。查看单元测试覆盖率,核心是两步:**运行测试时收集执行轨迹(.exec 文件),再用它生成可读报告**。下面分三种主流方式说明,选一种最适合你当前开发环境的即可。
用 Maven 命令行快速生成 HTML 报告
适合 CI/CD 或想脱离 IDE 快速验证覆盖率的场景。只需确保 pom.xml 已正确配置 JaCoCo 插件(推荐 0.8.10+ 版本):
- 在
<build><plugins></plugins></build>中添加jacoco-maven-plugin,并配置两个 execution:prepare-agent(注入探针)和report(生成报告) - 执行命令:
mvn clean test jacoco:report(注意顺序,test 必须先跑) - 报告默认生成在
target/site/jacoco/index.html,直接用浏览器打开即可 - 页面中会显示类、方法、行、分支等多维度覆盖率,红色高亮未覆盖行,绿色为已覆盖
在 IntelliJ IDEA 中实时查看覆盖率
适合日常开发调试,边写测试边看哪行没跑过,效率最高:
- 确认已安装 JaCoCo 插件(Settings → Plugins → 搜索 “JaCoCo” 并启用)
- 右键点击测试类或测试方法 → 选择 “Run ‘XXXTest’ with Coverage”
- 运行结束后,IDE 底部自动弹出 Coverage 工具窗口,左侧树状结构展示模块/包/类覆盖率
- 双击某个类,编辑器里会用颜色标记:绿色=已执行,黄色=部分分支未走(如 if 的 else 没触发),红色=完全未执行
- 特别注意:IDEA 默认只统计“当前运行的测试所覆盖的类”,若想全量覆盖,需配置 Run Configuration → Coverage → 勾选 “Tracing mode” 或改用 “Aggregate coverage”
覆盖异常分支和 finally 块的关键要点
很多同学发现 try-catch 或空 catch 块始终标红——不是 JaCoCo 有问题,而是测试没真正“走通路径”:
-
catch 块要变绿,必须让对应异常真实抛出且被该 catch 捕获,仅用
assertThrows不够,还需确保 catch 内部有可执行语句(如日志、状态修改)并被调用 - finally 块需被运行两次才完整覆盖:一次正常流程进入,一次异常流程进入;否则 JaCoCo 会提示“分支未覆盖”
- 空
catch {}或只有注释的块无法被标记为“已覆盖”,JaCoCo 要求至少有一条可执行字节码指令被执行 - Lombok 生成的 getter/setter、
@Data方法默认不参与覆盖率统计(除非显式开启lombok.addLombokGeneratedAnnotation = true)
不需要追求 100% 行覆盖,重点盯住分支覆盖率(Branch Coverage)和关键逻辑路径。JaCoCo 报告里的“Missed branches”数字比“Missed lines”更能反映测试盲区。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











