JaCoCo

JaCoCo覆盖率统计实战:从Maven/Gradle接入到增量覆盖与门禁配置 代码覆盖率是衡量单元测试质量的关键指标,但仅仅盯着行覆盖率远远不够,分支覆盖率才能更真实地反映逻辑盲区。JaCoCo作为JVM生态中事实上的覆盖率标准,通过字节码插桩采集指令、分支、行、方法等多维度数据,帮助团队定位未触达的代码路径。其价值不仅在于生成报告,更在于接入CI流水线后形成质量门禁,并支撑增量覆盖率的评估。无论是Maven还是Gradle项目,合理配置JaCoCo的agent、report与check目标,配合排除生成代码、多模块聚合与性能调优,就能让覆盖率数据真正驱动测试改进。本文从基础接入到进 阅读详情

JaCoCo 是 Java 代码覆盖率统计工具,用来统计单元测试跑了多少代码、哪些代码没走到,学生/新手直接跟着一步步做就行。

本文分两种最常用场景:IDEA 直接使用(零配置)、Maven 项目(标准开发用法),全程最简、无复杂配置。


一、先搞懂 3 个基础概念

  1. 代码覆盖率:单元测试执行时,走到的代码占总代码的比例。

  2. JaCoCo:Java 主流覆盖率工具,免费、开源,集成在 IDEA/Maven/Gradle。

  3. 常见覆盖率指标(只记 2 个够用):

    1. 行覆盖率(Line):代码行有没有被执行到(最常用)

    2. 分支覆盖率(Branch):if/else、switch 所有分支有没有都走到

    3. ?


二、环境准备

必备:

  1. IntelliJ IDEA(社区版/旗舰版都行)

  2. JDK 8+

  3. 自带 JUnit 单元测试(IDEA 默认集成)

不用单独装 JaCoCo!IDEA 内置了,开箱即用。


三、Demo 1:IDEA 原生 JaCoCo

Step 1:新建普通 Java 项目

  1. 打开 IDEA → New Project

  2. 名称:JaCoCo-Demo,构建工具选:IntelliJ(不要选Maven)

  3. JDK 选本地已配置版本,点击创建。

Step 2:编写业务代码

在 src/main/java 下新建类 Calculate.java


public class Calculate { // 简单加减判断,包含 if 分支,方便看覆盖率 public int add(int a, int b) { return a + b; } public String checkNum(int num) { if (num > 0) { return "正数"; } else if (num < 0) { return "负数"; } else { return "零"; } } }

Step 3:编写 JUnit 单元测试

  1. 右键 Calculate.java → Generate → Test

  2. 测试框架选择 JUnit ,勾选所有方法,确定。

  3. IDEA 自动在 src/test/java 生成 CalculateTest.java,写入测试代码:


import org.junit.Test; import static org.junit.Assert.*; public class CalculateTest { Calculate calc = new Calculate(); // 测试加法 @Test public void add() { int res = calc.add(1, 2); assertEquals(3, res); } // 只测试 正数 一个分支(故意不全测,看覆盖率效果) @Test public void checkNum() { String res = calc.checkNum(10); assertEquals("正数", res); } }

Step 4:配置 IDEA 使用 JaCoCo

  1. 顶部菜单栏:Run → Edit Configurations

  2. 左侧找到 JUnit → 选中你当前的测试类配置

  3. 右侧切换到 Code Coverage 标签页

  1. Coverage runner 选择:JaCoCo(默认可能是 Idea,改成 JaCoCo)

  2. 点击 Apply → OK

Step 5:运行测试 + 查看覆盖率报告

  1. 右键 CalculateTest.java → Run 'CalculateTest' with Coverage

  2. 运行完成后,底部出现 Coverage 面板

看懂颜色(核心!小白必记)

  • 绿色:代码被测试执行到(覆盖)

  • 红色:代码完全没执行(未覆盖)

  • 黄色:分支部分执行(if/else 只走了一部分)

效果说明

你会看到:

  • add 方法全绿(100%覆盖)

  • checkNum 里:num>0 绿,num<0 和 else 红(因为我们只测了正数)

  • 底部面板会显示:行覆盖率、分支覆盖率 数值

Step 6:补全测试,达到 100% 覆盖

修改 checkNum 测试方法,把所有分支都测一遍:


@Test public void checkNum() { assertEquals("正数", calc.checkNum(10)); assertEquals("负数", calc.checkNum(-5)); assertEquals("零", calc.checkNum(0)); }

再次 Run with Coverage → 全部代码变绿色,覆盖率 100%。


四、Demo 2:Maven 项目集成 JaCoCo(企业标准用法)

实际开发基本用 Maven/Gradle,下面是最简 Maven 配置,复制即用。

Step 1:新建 Maven 项目

  1. 新建项目 → 选择 Maven

  2. 勾选 Create from archetype → 选 maven-archetype-quickstart

  3. 填写项目名,完成创建。

Step 2:修改 pom.xml(核心配置)

打开根目录 pom.xml,做 2 件事:

  1. 引入 JUnit 测试依赖

  2. 配置 JaCoCo 插件

完整可直接复制的 pom.xml


<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.demo</groupId> <artifactId>jacoco-maven-demo</artifactId> <version>1.0</version> <!-- 统一 JDK 版本 --> <properties> <maven.compiler.source>17</maven.compiler.source> <maven.compiler.target>17</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <!-- 1. JUnit 依赖 --> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <scope>test</scope> </dependency> </dependencies> <!-- 2. Maven 插件:JaCoCo 覆盖率 --> <build> <plugins> <!-- JaCoCo 插件 最简配置 --> <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> <!-- 第二步:生成 HTML/XML 可视化报告 --> <execution> <id>report</id> <phase>test</phase> <goals> <goal>report</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>

Step 3:编写业务代码 & 测试代码

和上一个 Demo 完全一样:

  1. src/main/java/com/demo/Calculate.java(同上代码)

  2. src/test/java/com/demo/CalculateTest.java(同上测试代码)

Step 4:执行 Maven 命令,生成覆盖率报告

两种运行方式,任选其一:

方式1:IDEA 图形化

  1. 右侧打开 Maven 面板

  2. 展开项目 → Lifecycle → 双击 test

  3. Maven 会自动:编译代码 → 运行单元测试 → 执行 JaCoCo → 生成报告

方式2:命令行

打开终端,进入项目根目录,执行:


mvn test

Step 5:查看 Maven 生成的报告(网页版)

执行完成后,报告路径固定:


项目根目录/target/site/jacoco/index.html

  1. 进入该目录

  2. 双击 index.html,用浏览器打开

  3. 页面可以:

    1. 查看整体覆盖率

    2. 点击类 → 查看每一行代码覆盖情况(同样红绿区分)


五、常用命令 & 常见问题

1. 常用 Maven 命令

  • mvn test:运行测试 + 生成 JaCoCo 报告(最常用)

  • mvn clean test:先清空旧文件,再重新测试生成报告

2. 常见报错 & 解决

  1. 测试代码不执行、覆盖率 0%

    1. 原因:测试类/方法没加 @Test 注解

    2. 解决:补上 JUnit 注解,测试类放在 src/test/java 下

  2. pom 爆红、依赖下载失败

    1. 解决:刷新 Maven(IDEA 右上角刷新按钮),检查网络/镜像源

  3. JaCoCo 插件找不到

    1. 解决:直接用上面给的固定版本 0.8.12,不要写最新版


六、学习总结

  1. JaCoCo 作用:统计 Java 单元测试代码覆盖率。

  2. IDEA 快速用:Run → Edit Configurations → Code Coverage 选 JaCoCo,右键 Run with Coverage,看红绿代码。

  3. Maven 标准用法:pom 引入 jacoco 插件 → mvn test → 打开 target/site/jacoco/index.html 网页报告。

  4. 颜色规则:绿=已覆盖,红=未覆盖,黄=分支未全走。

Java单元覆盖率工具JaCoCo详细理解和使用(配置+示例) 一、代码覆盖率理解 代码覆盖(Code coverage)是软件测试中的一种度量,描述程序中源代码被测试的比例和程度,所得比例称为代码覆盖率。 简单来理解,就是单元测试中代码执行量与代码总量之间的比率。 Java常用的单元测试覆盖率框架有:JaCoCo、EMMA和Cobertura,本篇文章主要介绍JaCoCo的使用。 二、JaCoCo理解 JaCoCo官方文档:https://www.eclemma.org/jacoco/trunk... 阅读详情

相关推荐

jacoco增量覆盖率实践

Jacoco增量覆盖率说明 能找到这里,说明对jacoco的原理和使用有了一定的了解,而我写这边文章主要是网络上基本没有完整文档加代码的jaocco增量覆盖说明,所以我想分享些东西让需要这方面的人快速去实现自己想要的功能,那么如果想实现增量代码覆盖率需要做到哪些工作呢?(格式难看到这里看http://note.youdao.com/s/6gM8ONX3) 大家在网络上找到的实现方式无外乎三种 获取到增量代码,在jacoco进行插桩时判断是否是增量代码后再进行插桩,这样需要两个步骤,一是获取增量代码,二

tushuping的博客 2万+

代码覆盖率工具JaCoCo用法总结及示例

Java代码覆盖率工具JaCoCo的用法及配置示例

小蜜蜂1010的博客 1万+

jacoco增量覆盖率平台开发

先聊聊做这个平台的意义,从项目管理角度来说,测试说项目测试完成,该如何证明呢?一般情况下我们进行验收时没什么问题就算完成了,但是实际上测试很多情况并没有考虑到。所以该平台可以反哺测试的测试用例,让平台质量把控上升一个层次,其次可以作为产品验收的标准。覆盖率至少达到百分90才可以发布到生产。为什么时百分90不是百分百,作为开发人员有很多时候会写一些防止报错的异常代码,这部分代码可能正常情况下是永远执行不到的。

a807719447的专栏 4194

jacoco:java代码覆盖率实践

java代码覆盖率实践

一个Tester的博客 7824

Jacoco增量代码覆盖率

jacoco增量代码覆盖率 作者:兰绿,荣荣 文章结构 背景 Jacoco简介 Jacoco 增量代码覆盖率设计方案 Jacoco增量代码覆盖率+持续交付 总结 一、背景 需求测试过程中,测试主要依靠需求及一些测试经验来主观保证质量。为了解决测试度量不清晰的问题,测试用jacoco从代码层面衡量测试覆盖率。分析未覆盖部分代码,从而反推前期测试设计是否重复,没有覆盖到的代码是否是测试设计的盲点。代码覆盖率可以作为测试自我审视的重要工具之一。 jacoco代码覆盖率统计的是全量代码覆盖率,报告冗余,影响我

rr18758236029的博客 1万+

jacoco框架学习使用

(Java Code Coverage)是一个用于的。分析代码执行情况,评估测试用例对代码的覆盖程度,生成覆盖率报告。

liushangzaibeijing的博客 2681

jacoco的使用

一、概述 测试覆盖率,老生常谈的话题。因为我测试理论基础不是很好,就不提什么需求覆盖率啦这样那样的主题了,直奔主题,咱主要指 Java 后端的测试覆盖率。 由于历史原因,公司基本不做 UT,所以对测试来说,咱最关心的还是手工执行、接口执行 (人工 Postman 之类的)、接口自动化、WebUI 自动化对一个应用系统的覆盖度。 此文也是对另一篇文章关于 Java 端覆盖率探索的一个细化,当时主要是为了描述 App 端的踩坑,所以关于服务端一笔带过了,现得空详细补充一下。小记 Java 服务端和 And

码农崛起 1万+

【软件工具-jacoco】结合jacoco实现原理步骤,把这些依赖和插件在什么步骤使用详细介绍一下

JaCoCo 的实现原理:通过字节码插桩和运行时数据收集来跟踪代码执行情况,并生成覆盖率报告。:在test阶段执行,负责运行单元测试并生成测试结果。在test阶段之前执行,配置 JaCoCo 代理以收集覆盖率数据。report在verify阶段执行,生成覆盖率报告。通过这种方式,JaCoCo 能够有效地与 Maven 构建过程集成,自动收集和报告代码覆盖率信息。使用 JaCoCo 进行覆盖率分析,并在测试执行后生成覆盖率报告。运行 JUnit 测试,并生成测试结果报告。

weixin_46453070的博客 1826

【软件工具-jacoco】org.jacoco.agent 是在jacoco字节码插桩的时候起作用还是在运行时数据收集时候起作用?

test阶段是在verify阶段之前执行的,主要用于运行测试用例。verify阶段是在test阶段之后执行的,主要用于验证项目的质量和完整性。因此,verify阶段并不包含test阶段,而是依赖于test阶段的结果。主要在运行时数据收集时起作用,负责监控代码执行并收集覆盖率信息。字节码插桩是在构建过程中完成的,通常由 JaCoCo Maven 插件处理,而不是由直接完成的。因此,的作用是在测试运行期间收集覆盖率数据,而不是在插桩过程中。JaCoCo 的正常运行依赖于这三个任务。

weixin_46453070的博客 1816

JaCoCo 用户提出的问题的汇总

JaCoCo 用户提出的问题的汇总 X 功能什么时候发布? JaCoCo 由志愿者在空闲时间维护。由于我们无法保证免费容量,我们不承诺特定的发布日期。通常情况下,您每年都会发布几个版本。 在更改日志中,您可以看到在 master 分支中实现的所有功能,并将在下一个版本中可用。同时您可以测试最新版本的主分支(Maven SNAPSHOT)并向我们提供反馈。 JaCoCo 有 [Eclipse|Netbeans|Whatever…] 的插件吗? 有关当前与各种工具的集成,请参阅此列表。 JaCoCo 支持哪些

geoffrey00的博客 3145

学Simulink--基于多能源系统协同与能源互联网的电网系统场景实例:风光氢储一体化系统的能量管理与调度仿真

在全球“双碳”目标驱动下,高比例可再生能源并网成为电网发展的核心方向。然而,风电与光伏具有强随机性与间歇性,给电网稳定运行带来巨大挑战。风光氢储一体化系统(Wind-Solar-Hydrogen-Storage Integrated System)通过将可再生能源发电电解水制氢氢气储存与燃料电池发电有机结合,构建了一个长时储能与能量形态转换的闭环系统,是实现能源互联网与零碳电力系统的关键路径。✅平抑波动:氢储能可实现跨天、跨周储能✅能量转化:电→氢→电/热/交通燃料,实现多能互补✅长时储能。

amy_mhd的博客 1069

Maven通过Jacoco生成单元测试覆盖率数据,无法生成jacoco.exec

由于jacoco-maven-plugin与maven-surefire-plugin插件均使用argLine参数,导致surefire覆盖了jacoco的参数,而无法生成jacoco.exec,maven报错:Skipping JaCoCo execution due to missing execution data file 在jacoco中加入propertyName参数,在surefi...

Fung_Daniel的博客 1万+

dify案例-基于Dify打造智能合同审查助手:零代码搭建工作流全指南

Dify的工作流(Workflow)功能是一个可视化流程编排工具,允许用户通过拖拽节点的方式构建复杂的AI应用。与简单的问答应用不同,工作流支持多步骤任务处理、条件分支、并行执行等高级功能,非常适合合同审查这类结构化任务。可视化编排:无需编写代码,通过拖拽连接节点即可构建复杂流程多模型协作:可在不同节点使用最适合的AI模型灵活集成:支持知识库检索、条件判断、API调用等多种节点类型迭代优化:可随时测试和调整单个节点,不影响整体流程可视化搭建:无需编码经验,拖拽式构建复杂审查流程灵活扩展。

weixin_44245188的博客 1939

jacoco入门_Gradle JaCoCo 插件

JaCoCo 插件JaCoCo 插件目前还是孵化中状态。请务必注意,在以后的 Gradle 版本中,DSL 和其他配置可能会有所改变。JaCoCo 插件通过集成 JaCoCo为 Java 代码提供了代码覆盖率指标。入门要想开始,请将 JaCoCo 插件应用于你想要计算代码覆盖率的项目中。应用 JaCoCo 插件build.gradleapply plugin: "jacoco"如果 Java 插件...

weixin_30925435的博客 801

audio框架学习-Audio_Flinger分析

文章目录一、代码位置二、audio服务启动2.1 main服务2.2 audioflinger添加到系统服务中2.3 audioflinger的对外接口 之前记录过audioTrack的笔记,这次继续参考audioFlinger相关的代码并做笔记; 参考文档:https://www.cnblogs.com/innost/archive/2011/01/15/1936425.html和https://blog.youkuaiyun.com/zyuanyun/article/details/60890534?spm=100

永不秃头的程序员的博客 2135

从零到一:揭秘BlueROV2机械爪背后的Pixhawk舵机控制艺术

本文详细解析了如何基于Pixhawk飞控系统为BlueROV2水下机器人构建可靠的舵机控制系统。从硬件选型、ArduSub固件配置到供电安全与故障排除,全面揭秘机械爪背后的控制艺术,为水下机器人爱好者提供实用指南。

ol78901234的博客 242

jacoco入门_JaCoCo 插件

JaCoCo 插件JaCoCo 插件目前还是孵化中状态。请务必注意,在以后的 Gradle 版本中,DSL 和其他配置可能会有所改变。JaCoCo 插件通过集成 JaCoCo为 Java 代码提供了代码覆盖率指标。入门要想开始,请将 JaCoCo 插件应用于你想要计算代码覆盖率的项目中。应用 JaCoCo 插件build.gradleapply plugin: "jacoco"如果 Java 插件...

weixin_32915107的博客 1203

医疗大模型实战——从零构建MedicalGPT全流程解析

本文详细解析了从零构建医疗大模型MedicalGPT的全流程实战。基于Qwen-7B模型与约195万条中文医疗数据,完整复现了增量预训练、监督微调与偏好对齐三大核心环节,并分享了如何在有限硬件资源下实现高效训练与部署,为开发者提供了可复现的医疗AI项目实战指南。

weixin_29193259的博客 553

【软将军-jacoco】执行jacoco进行单元测试,pom里应该配置什么依赖和插件,pom里面配置起的作用是什么?

提供代码覆盖率的实时收集功能,帮助开发者了解未测试的代码部分。自动生成详细的覆盖率报告,以便于检查代码质量和提高测试的全面性。可以集成到 CI/CD 流程中,确保在代码合并或发布之前满足特定的覆盖率标准。是必需的,以便在测试运行时收集覆盖率数据。report是必需的,以便在测试完成后生成覆盖率报告。check是可选的,用于在构建过程中验证覆盖率是否达到预期标准。通过这些配置,您可以确保在构建过程中正确收集和报告代码覆盖率信息。基本配置和report是最常用的配置,用于收集和生成覆盖率报告。

weixin_46453070的博客 1959

基于STM32的嵌入式平台实现EtherCAT主站

本文将介绍如何在基于STM32的嵌入式平台上构建EtherCAT主站,并提供相应的源代码。使用SOEM库提供的API函数,我们可以实现与EtherCAT从站设备的实时通信和数据交换。在STM32的代码中,使用SOEM库提供的API函数初始化EtherCAT主站。在SOEM库中,我们可以找到EtherCAT主站的实现代码和相关的API函数。使用SOEM库提供的API函数实现EtherCAT主站的功能,包括发送和接收EtherCAT数据帧、处理从站设备的状态等。确保连接正常并且设备能够相互通信。

CodeSageX的博客 2832

IT:银行类金融科技岗笔试习题集合—四个模块包括【综合知识+EPI+英语+个性测评】持续更新,建议收藏

IT:银行类金融科技岗笔试习题集合—四个模块包括【综合知识+EPI+英语+个性测评】 导读:行测、综合知识、英语和性格测试。综合知识,包括货币学、金融、会计、计算机等内容。  行政能力测试,内容大家可以参考公务员考试,包括逻辑推理、数字推理、图形推理、文字推理。英语测试,包括语法和词汇30题、完型填空20题、10篇阅读理解50题,阅读理解文章特别长,生词特别多。 (1)、英语可以Ctrl+F...

头部AI社区如有邀博主AI主题演讲请私信—心比天高,仗剑走天涯,保持热爱,奔赴向梦想!低调,专注,谦虚,自律,反思,成长,还算比较正能量的博主,公益免费传播…内心特别想在AI界做出一些可以推进历史进程影响力的技术(兴趣使然,有点小情怀,也有点使命感呀 2万+

Jacoco

Java Agent 本质上是 JDK 提供的一个工具。 在 JDK1.5 之后,可以使用 Java Agent 技术构建一个独立于应用程序的代理程序(即Agent)。 可以用来协助监测、运行甚至替换其他JVM上的程序。使用它可以实现虚拟机级别的AOP功能,比如字节码注入Dump文件参数说明 Address:要连接的主机名或 IP 地址(启动时的ip地 址) Port:要连接的端口(默认 6300)(启动时的端口 号) Destfile:将执行数据写入的文件生成报告参数说明。

sinat_34766121的博客 1164

打开 AI 投研新时代 —— 深度解析 GitHub 高星项目 daily_stock_analysis

GitHub热门开源项目"daily_stock_analysis"是一款AI驱动的智能股票分析工具,能自动抓取行情数据、分析新闻语义并生成结构化报告。该项目采用Python开发,通过GitHub Actions实现全自动运行,支持邮件、企业微信等多渠道推送。核心功能包括AI决策仪表盘、多数据源整合和零成本部署方案,特别适合需要自动化投研辅助的个人投资者。项目强调其仅为分析工具而非投资建议,提醒用户注意AI模型的潜在误差。该工具通过智能化处理重复工作,帮助投资者提升决策效率,成为量化投资

陈奕昆的博客 1522

JaCoCo 是什么

JaCoCo是一款Java代码覆盖率工具,用于分析测试用例对代码的覆盖程度,帮助开发者识别未测试区域。它支持行、分支、方法和类覆盖率统计,并能生成HTML、XML等多种格式报告。通过与Maven、Gradle等构建工具集成,JaCoCo可以在测试时动态收集覆盖率数据。其工作原理是通过字节码插桩记录代码执行情况。配置简单,只需在pom.xml添加插件即可快速生成可视化报告。JaCoCo还能与Jenkins、SonarQube等CI/CD工具集成,设置覆盖率阈值进行质量管控。相比Cobertura等工具,JaC

非猿 1438

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

上一篇: 单元测试 + Mockito 开发指南
下一篇: Playwright 自动化实战指南 - 以 12306 余票查询为例
wh_xia_jun
博客等级 码龄16年 1335粉丝 405原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值