一文搞懂JaCoCo Java代码覆盖率工具

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

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

目录

1. JaCoCo 简介

2. JaCoCo 原理

2.1 on-the-fly模式

2.2 offline模式

2.3 on-the-fly和offline对比

3. JaCoCo 使用

3.1 Ant Tasks —— Apache Ant 方式

3.2 Java Agent —— 命令行方式

3.2.1 官方介绍

3.2.2 流程说明

3.2.3 举例

3.3 Maven Plug-in —— Apache Maven 方式

3.4 Eclipse EclDmma Plugin 方式

3.5 Jenkins集成


参考资料:

官方文档

JAVA代码覆盖率工具JaCoCo-原理篇

JAVA代码覆盖率工具JaCoCo-实践篇

JaCoCo控制流分析

 

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

相关推荐

jacoco增量覆盖率平台开发

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

a807719447的专栏 4194

Jacoco增量代码覆盖率

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

rr18758236029的博客 1万+

【腾讯TMQ】JAVA代码覆盖率工具JaCoCo-原理篇

如果你的项目是JAVA的,相信我~,覆盖率工具选择JaCoCo是一个非常明智的选择。

TMQ1225的博客 1万+

Java代码覆盖率工具(Sonar+Jacoco)部署

代码覆盖率的局限 Java代码覆盖率工具调研 使用jacoco+sonar实现测试过程中的代码覆盖率检测 jacoco+sonar部署步骤及使用

wangxinyao318的专栏 2万+

JaCoCo 统计自动化测试代码覆盖率

1. 为什么要关注测试覆盖率:代码覆盖: 设计测试用例的时候我们会考虑程序的逻辑,需要考虑到每个函数的输入与输出,逻辑分支代码的执行,这个时候我们的测试执行情况就需要一定的数据来衡量。 我们用代码覆盖率的结果来反向检查覆盖用例是否充分完整。 2. JaCoCo是什么: java主要代码覆盖工具:EMMA、JaCoCo JaCoCo是一个开源的覆盖率工具(官网地址: [https://www.j...

weixin_41407477的博客 5322

二、jacoco代码覆盖率工具的安装与使用

JaCoCo 是一个免费的Java 代码覆盖库,它是由EcIEmma 团队根据多年来使用和集成现有库的经验教训创建的。

好多可乐的博客 2439

WAVE格式

一.wave格式概述 Wave文件格式是用于多媒体文件存储的Microsoft RIFF(Resource Interchange FileFormat)的一个子集。每一个RIFF文件以一个文件头开始,后面是一系列数据块。Wave文件通常是包含“WAVE”块的RIFF文件。而该“WAVE”块由两个子块组成,称为“fmt”块。“fmt”块用于确定数据格式,并且“data”块包含实际的样本数据,

yejia1280的博客 4389

手把手教你用X-AnyLabeling实现医学图像标注:从SAM模型选择到多边形优化全流程

本文详细介绍了如何使用X-AnyLabeling平台结合Med-SAM等专业模型实现医学图像的高效标注。从环境配置、模型部署到实战工作流,涵盖智能辅助标注、低对比度解决方案及团队协作方案,帮助医疗从业者大幅提升标注效率与质量。特别适合处理CT/MRI等医学影像的复杂标注需求。

weixin_29251131的博客 456

Unity 2D精灵点击交互实现:从BoxCollider 2D到Event Trigger的完整指南

本文提供了Unity 2D精灵点击交互的完整实现指南。通过详细拆解BoxCollider 2D与Event Trigger两大核心组件的协同工作原理,手把手教你为Sprite Renderer添加点击、悬停等事件响应。文章包含从基础配置到进阶优化、性能调试的实战步骤,帮助开发者高效实现游戏世界内的对象交互,是Unity 2D开发的实用教程。

ansible6ops的博客 301

【论文精读】Formal Mathematical Reasoning: A New Frontier in AI

注:本文根据师兄汇报内容总结。

m0_60634555的博客 1189

LangChain4j + Milvus 从0-1实现会话管理与RAG检索的AIChat超详细教程

本教程将介绍如何使用LangChain4j和Milvus向量数据库构建一个具备流式输出、会话管理、会话隔离和基于文档RAG检索能力的AI机器人。我们将使用阿里百炼模型作为LLM后端,并通过Docker部署Milvus向量数据库。创建Assistant接口,定义聊天服务:LangChain4j 中文文档 | LangChain4j 中文文档wiringMode :这个属性一般两种,一种是自动装配,我们这里选择手动配置。

2301_80014343的博客 1435

Zabbix华为交换机光衰告警

zabbix使用自动发现监控huawei网络设备光衰

qq_31651649的博客 4529

【Autosar从入门到精通到进阶实战篇】75 0x34/0x36/0x37:请求下载、传输数据、请求退出——刷写流程的“三兄弟”

文章摘要:UDS刷写流程0x34/0x36/0x37关键实现要点 本文通过一个真实ECU变砖案例,揭示了UDS刷写服务(0x34请求下载、0x36传输数据、0x37请求退出)的实现陷阱与最佳实践。核心要点: 安全架构设计: 0x34阶段只协商参数,不立即擦除Flash 采用缓冲区暂存数据,避免频繁写Flash 严格检查地址对齐和内存边界 关键改进措施: 实现数据包序列号校验(防错位) 传输层缓冲区溢出保护 0x37阶段必须包含完整性校验(如CRC32) 一次性批量写入Flash,减少擦写次数 典型错误模式:

企鹅码农的专属播客,分享10多年的实战案例和经验解读,包含YOLO、RT-DETR、AI等各个工作领域。 71

【控制模块路径跟踪算法】PID控制算法实现路径跟踪(附C++代码)

认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!本文先对PID控制算法实现路径跟踪–飞思卡尔的方法做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容PID属于无模型控制,调节三个环节的参数会产生什么影响根据控制对象的不同也会有很大差别PID形象解释小明接到这样一个任务:有一个水缸点漏水(而且漏水的速度还不一定固定不变),要求水面高度维持在某个位置,一旦发现水面高度低于要求位置,就要往水缸里加水。

qq_35635374的博客 2386

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

上一篇: ActiveMQ详解二 —— ActiveMQ问题总结
下一篇: Java基础:Java与C++的语言特性区别
码拉小农虾
博客等级 码龄15年 15粉丝 24原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值