JaCoCo 是什么

JaCoCo(Java Code Coverage)是一款广泛使用的 Java 代码覆盖率工具,用于分析测试用例对项目代码的覆盖程度,帮助开发者识别未被测试的代码区域,从而提升软件质量。它通常与 JUnitTestNG 等测试框架及 MavenGradle 等构建工具集成,是 DevOps 流程中的重要组成部分。


JaCoCo 的核心功能

  1. 覆盖率统计

    • 行覆盖率:测试是否覆盖了代码的每一行。
    • 分支覆盖率:是否覆盖了所有条件分支(如 if-else)。
    • 方法覆盖率:是否调用了每个方法。
    • 类覆盖率:是否测试了所有类。
  2. 多种输出报告

    • HTML:可视化展示覆盖率详情(按包、类、方法逐级下钻)。
    • XML/CSV:便于集成到 CI/CD 工具(如 Jenkins、SonarQube)。
  3. 实时监控

    • 在单元测试或集成测试运行时动态收集覆盖率数据。
  4. 与构建工具无缝集成

    • 支持 MavenGradleAnt,通过简单配置即可启用。

JaCoCo 的工作原理

  1. 字节码插桩
    • JaCoCo 在编译时或运行时向 Java 字节码插入探针(Probes),记录代码执行情况。
  2. 数据收集
    • 测试运行时,探针记录哪些代码被执行。
  3. 报告生成
    • 测试完成后,生成覆盖率报告(如 index.html)。

快速开始(Maven 项目示例)

1. 配置 Maven 插件

pom.xml 中添加 JaCoCo 插件:

<plugin><groupId>org.jacoco</groupId><artifactId>jacoco-maven-plugin</artifactId><version>0.8.8</version><executions><execution><goals><goal>prepare-agent</goal> <!-- 在测试阶段插入探针 --></goals></execution><execution><id>generate-report</id><phase>test</phase> <!-- 测试完成后生成报告 --><goals><goal>report</goal></goals></execution></executions>
</plugin>
2. 运行测试并生成报告
mvn clean test  # 运行测试后,报告会生成在 target/site/jacoco/index.html
3. 查看报告

打开 target/site/jacoco/index.html,可以看到如下内容:

  • 摘要页:总覆盖率(如 85% 行覆盖)。
  • 详情页:点击具体类,查看未覆盖的代码行(红色标记)。

JaCoCo 与 CI/CD 集成

  1. Jenkins 集成

    • 安装 JaCoCo Plugin,在 Pipeline 中配置覆盖率阈值:
      pipeline {stages {stage('Test') {steps {sh 'mvn test'}}}post {always {jacoco(execPattern: 'target/jacoco.exec',classPattern: 'target/classes',sourcePattern: 'src/main/java')}}
      }
      
  2. SonarQube 集成

    • sonar-project.properties 中指定 JaCoCo 报告路径:
      sonar.java.coveragePlugin=jacoco
      sonar.jacoco.reportPaths=target/jacoco.exec
      

JaCoCo 的常见配置选项

配置项作用
<includes>只统计指定包/类的覆盖率(如 com.example.*)。
<excludes>排除特定类(如生成的代码、测试类)。
<rules>设置覆盖率阈值,失败时终止构建(如行覆盖率必须 ≥80%)。
<outputDirectory>自定义报告输出目录。

JaCoCo vs. 其他覆盖率工具

工具语言特点
JaCoCoJava零配置、轻量级、支持字节码插桩和离线模式。
CoberturaJava较老旧,需显式插桩,报告格式较简单。
EmmaJava已停止维护,仅支持离线插桩。
IstanbulJavaScript用于 Node.js/前端项目(如 Jest 覆盖率)。

最佳实践

  1. 设定合理的覆盖率目标
    • 关键模块(如支付逻辑)要求 90%+,非核心代码可放宽。
  2. 排除无需测试的代码
    • 如自动生成的类、DTO、Main 方法:
      <configuration><excludes><exclude>**/dto/*</exclude><exclude>**/Application.java</exclude></excludes>
      </configuration>
      
  3. 结合单元测试和集成测试
    • JaCoCo 可合并多份报告,全面反映测试覆盖情况。

常见问题

Q:JaCoCo 能测多模块项目吗?
A:可以!在父 POM 中配置插件,子模块会继承设置,最终合并覆盖率数据。

Q:如何检查测试覆盖率是否达标?
A:通过 Maven 的 check 目标,配置规则:

<execution><id>check-coverage</id><goals><goal>check</goal></goals><configuration><rules><rule><element>CLASS</element><limits><limit><counter>LINE</counter><value>COVEREDRATIO</value><minimum>0.8</minimum></limit></limits></rule></rules></configuration>
</execution>

总结:JaCoCo 是 Java 开发者提升代码质量的利器,通过量化测试覆盖率,帮助团队发现测试盲区。结合 CI/CD 和 SonarQube,可实现自动化质量门禁,确保每次提交的代码均经过充分验证。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/pingmian/82787.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

火山引擎扣子系列

您提到的“火山引擎扣子系列”指的应该是 **火山引擎推出的智能AI对话开发与应用平台——Coze&#xff08;中文名&#xff1a;扣子&#xff09;**。这是一个由字节跳动旗下火山引擎开发的、面向开发者和非技术用户的**低代码/无代码AI Bot开发平台**&#xff0c;旨在帮助用户快…

OpenLayers 加载ArcGIS瓦片数据

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 随着GIS应用的不断发展&#xff0c;Web地图也越来越丰富&#xff0c;除了像ESRI、超图、中地数码这样GIS厂商有各自的数据源格式&#xff0c;也有Google…

大模型是什么?

大模型&#xff0c;英文名叫Large Model&#xff0c;也被称为基础模型&#xff08;Foundation Model&#xff09;。我们通常说的大模型&#xff0c;主要指的是其中最常用的一类——大语言模型&#xff08;Large Language Model&#xff0c;简称LLM&#xff09;。除此之外&#…

LLaMaFactory 微调QwenCoder模型

步骤一&#xff1a;准备LLamaFactory环境 首先,让我们尝试使用github的方式克隆仓库: git config --global http.sslVerify false && git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git # 创建新环境&#xff0c;指定 Python 版本&#xff08;以 3.…

【位运算】判断字符是否唯⼀(easy)

33. 判断字符是否唯⼀&#xff08;easy&#xff09; 题⽬描述&#xff1a;解法&#xff08;位图的思想&#xff09;&#xff1a;C 算法代码&#xff1a;Java 算法代码&#xff1a; 题⽬链接&#xff1a;⾯试题 01.01. 判定字符是否唯⼀ 题⽬描述&#xff1a; 实现⼀个算法&…

满天星之canvas实现【canvas】

展示 文章目录 展示Canvas 介绍【基础】简介兼容性关键特性注意事项应用场景&#xff1a;基本示例 满天星代码实现【重点】代码解释 全量代码【来吧&#xff0c;尽情复制吧少年】html引入JS代码 参考资源 Canvas 介绍【基础】 简介 Canvas是一个基于HTML5的绘图技术&#xff0…

可视化提示词(Prompt)在训练过程中的优化过程:visualize_prompt_evolution

可视化提示词(Prompt)在训练过程中的优化过程:visualize_prompt_evolution 这个函数 visualize_prompt_evolution 的作用是可视化提示词(Prompt)在训练过程中的优化过程,通过对比每个训练轮次(Epoch)的提示词与初始提示词的差异,直观展示哪些Token被保留、哪些被修改…

2025 一带一路暨金砖国家技能发展与技术创新大赛 第一届“信创适配及安全管理赛项”样题

2025 一带一路暨金砖国家技能发展与技术创新大赛 第一届“信创适配及安全管理赛项”样题 模块A-理论知识&#xff1a;模块B-适配环境搭建&#xff1a;系统安装与配置&#xff1a;DNS 服务配置&#xff1a;DNS 服务配置&#xff1a;CA 服务配置&#xff1a;Httpd 服务配置&#…

Qt Creator调用Python代码

Qt Creator调用Python代码 项目场景:现在我写的Qt上位机,需要调用同事使用python写的代码,所以我需要一个整合,把同事的代码融合进我的Qt工程里来。 所以,本篇记录Qt Creator中调用Python的一种方法。 操作系统:windows 11 64位 Python使用的版本为 3.9.10,(安装参…

【QQ音乐】sign签名| data参数 | AES-GCM加密 | webpack(上)

1.目标 网址&#xff1a;https://y.qq.com/n/ryqq/toplist/26 切换榜单出现请求&#xff0c;可以看到sign和data是加密的 2.逆向分析 搜索sign: 可以看到sign P(n.data)&#xff0c;而n.data就是请求的加密data参数 data {"comm":{"cv":4747474,&qu…

uni-app(6):Vue3语法基础下

1 列表渲染 1.1 在 v-for 里使用数组 v-for 指令可以实现基于一个数组来渲染一个列表。v-for 指令需要使用 item in items 形式的特殊语法&#xff0c;其中 items 是源数据数组&#xff0c;而 item 则是被迭代的数组元素的别名。 在 v-for 块中&#xff0c;我们可以访问所有父…

STM32之SPI——外部FLASH和RFID

一、SPI协议的原理与应用 基本概念 串行外设接口SPI&#xff08;Serial Peripheral Interface&#xff09;是由美国摩托罗拉公司最先推出的一种同步串行传输规范&#xff0c;也是一种单片机外设芯片串行外设扩展接口。该接口是一种高速、全双工、同步的通信总线&#xff0c;并…

51c视觉~3D~合集3

我自己的原文哦~ https://blog.51cto.com/whaosoft/13954440 #SceneTracker 在4D时空中追踪万物&#xff01;国防科大提出首个长时场景流估计方法 本篇分享 TPAMI 2025 论文​​SceneTracker: Long-term Scene Flow Estimation Network​​&#xff0c;国防科大提出首…

cf2059B

原题链接&#xff1a;https://codeforces.com/contest/2059/problem/B 题目背景&#xff1a; 将一个长度为 n 的数组 a 划分为 k 个数组&#xff0c;再将所有偶数索引的数组合并成 b 数组&#xff0c;定义代价为 的最小索引 i &#xff0c;可得到的最小代价为多少。 思路&am…

爬虫到智能数据分析:Bright Data × Kimi 智能洞察亚马逊电商产品销售潜力

前言 电商数据分析在现代商业中具有重要的战略价值&#xff0c;通过对消费者行为、销售趋势、商品价格、库存等数据的深入分析&#xff0c;企业能够获得对市场动态的精准洞察&#xff0c;优化运营决策&#xff0c;预测市场趋势、优化广告投放、提升供应链效率&#xff0c;并通…

从解决一个分享图片生成的历史bug出发,详解LayoutInflater和View.post的工作原理

问题背景 最近在项目中遇到一个问题&#xff1a;在档口分享功能中&#xff0c;需要动态生成一个分享图片。代码是这样写的&#xff1a; // 项目中的代码 val shareView LayoutInflater.from(thisStallMainActivityV1).inflate(R.layout.share_header_stall_main_layout, nul…

2.linux目录切换命令:cd与pwd以及路径与路径符

cd 切换当前工作目录 cd [linux路径0] cd没有选项,直接执行,只有参数.如果没有参数,表示回到用户的home目录 pwd 无参,无选项,直接打印当前工作目录的绝对路径 路径 相对路径 以当前目录为起点,路径描述无需使用/开头 # cd Desktop 绝对路径 路径描述需要以/开头 cd…

摩尔条纹 原理以及matlab 实现

一、简介 莫尔条纹的形成原理-CSDN博客 “莫尔”一词源于法文“Moire”&#xff0c;其原本的含义是“波动”或者“起波纹的”。早在古代时期&#xff0c;人们便偶然发现&#xff0c;当把两块薄的丝绸织物相互叠加放置时&#xff0c;能够看到一种呈现不规则形态的花纹。此后&a…

【海康USB相机被HALCON助手连接过后,MVS显示无法连接故障。】

在Halcon里使用助手调用海康USB相机时&#xff0c;如果这个界面点击了【是】 那么恭喜你&#xff0c;相机只能被HALCON调用使用&#xff0c;使用MVS或者海康开发库&#xff0c;将查找不到相机 解决方式&#xff1a; 右键桌面【此电脑】图标 ->选择【管理】 ->选择【设备…

数据治理是什么意思?数据治理平台有哪些?

目录 一、数据治理的概念 1. 数据治理的定义 2. 数据治理的目标 二、数据治理的实施流程 1. 规划阶段 2. 评估阶段 3. 执行阶段 4. 监控与评估阶段 三、常见的数据治理平台 1. FineDataLink 2. IBM InfoSphere Information Governance Catalog 四、总结 随着企业业…