二、jacoco代码覆盖率工具

jacoco代码覆盖率工具

      • 一、jacoco介绍
      • 二、常见的java代码覆盖率工具
      • 三、为什么选择jacoco
      • 四、jacoco的特点
      • 五、Jacoco 支持的覆盖率指标
      • 六、那些暂未支持的覆盖率指标
      • 七、jacoco技术原理
      • 八、Jacoco 下载与配置
      • 九、jacoco主要文件
      • 十、jacoco使用流程
      • 十一、jacoco单元测试实战
        • 1、单元测试的代码覆盖率统计方法
        • 2、maven项目进行单元测试

一、jacoco介绍

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

二、常见的java代码覆盖率工具

  • jacoco(单元、集成测试)
  • emma(base on jacoco)
  • cobertura(单元测试)

三、为什么选择jacoco

有几种可用的Java 开源覆盖技术。在实现Eclipse插件EclEmma 时,观察到它们都不是真正为集成而设计的。它们中的大多数专门适用于特定工具(Ant 任务、命令行、IDE插件),并且不提供允许嵌入不同上下文的文档化API。两个最好的和广泛使用的开源工具是EMMA和Cobertura。这两个工具都不再由原作者积极维护,也不支持当前的Java 版本。由于缺乏回归测试,维护和功能添加很困难

四、jacoco的特点

  • 覆盖率分析指标丰富 Coverage analysis ofinstructions(CO),branches(C1),lines,methods, types and cyclomatic complexity.
  • 可以不依赖源代码 Based on Java byte code
  • 集成方式灵活 Simple integration
  • 开发框架无关 Framework agnostic
  • 兼容所有的 java 版本 Compatible with all released Java class file versions.
  • java kotlin scala等多jvm语言支持 Support for different JVM languages.
  • 多种报告格式 Several report formats(HTML,XML, CSV).
  • 允许远程控制 Remote protocol andJMX
  • 有独立的工具与 ant maven 的集成支持

五、Jacoco 支持的覆盖率指标

  • 指令覆盖率 Instructions
  • 分支覆盖率 Branches(重要
  • 圈复杂度覆盖率 CyclomaticComplexityV(G)Gant2p:度量路径是否覆盖
  • 代码行覆盖率Lines (重要
  • 方法覆盖率 Methods
  • 类覆盖率 Classes

六、那些暂未支持的覆盖率指标

  • 条件覆盖率(Condition coverage)每一个逻辑表达式中的每一个条件(无法再分解的逻辑表达式)是否都有运行到成立及不成立的情形
  • 条件/判断覆盖率(Condition/decision coverage)需同时满足判断覆盖率和条件覆盖率
  • 修改条件/判断覆盖 modifed condition/decision coverage,简称 MC/DC影响判断结果的条件中,每个变量都出现至少二次,其中至少一次其值为真,至少一次其值为假
  • 循环覆盖率(Loop coverage)所有循环是否都有运行过零次、一次及一次以上的测试
  • 参数值覆盖率(Parameter Value Coverage)对于一个方法的所有参数,是否有运行过其中最常见的数值?

七、jacoco技术原理

在这里插入图片描述
主推on-the-fly
在这里插入图片描述

  • offine插桩模式应用场景
    • 不支持java agent; Runtime environments that do not support Java agents.(比如android)
    • 不支持配置jvm 参数;Deployments where itis not possible to confgure JVM options.
    • 字节码不兼容的平台;Bytecode needs to be converted for another VM like the AndroidDalvik VM.
    • 与其他 agent 冲突;Conflicts with other agents that do dynamic classfle transformation
      在这里插入图片描述

八、Jacoco 下载与配置

官网: jacoco.org/jacoco

JACOCO HOME设置环境变量,方便后续引用,你可以修改为你的jacoco本地地址
export JACOC0_HOME=/root/jacoco-0.8.9

九、jacoco主要文件

文件用途
lib/jacocoagent.jaron the fly 运行时插桩用到的java agent
lib/jacococli.jarjacoco的命令行工具

十、jacoco使用流程

文档:https://www.jacoco.org/jacoco/trunk/doc/cli.html

  • instruments
    • instruments by on the fly 启动被测应用时添加java agent
    • instruments by offline 直接对class文件进行插桩
  • testcase 执行测试
  • dump 导出覆盖率数据
  • merge 覆盖率数据合并
  • report生成报告

十一、jacoco单元测试实战

1、单元测试的代码覆盖率统计方法
  • 通过构建工具插件集成 ant maven gradle
  • 执行测试
  • 生成报告
2、maven项目进行单元测试
  • 官方文档:https://www.jacoco.org/jacoco/trunk/doc/maven.html
  • 具体步骤:
    • pom文件里安装插件,具体配置见下面
    • clean清理
    • pre agent配置agent
    • test执行测试
    • jacoco:report生成报告
      • 这几个可以合成一个命令: mvn clean test jacoco:report
 <plugin><groupId>org.jacoco</groupId><artifactId>jacoco-maven-plugin</artifactId><version>0.8.13-SNAPSHOT</version><executions><execution><id>default-prepare-agent</id><goals><goal>prepare-agent</goal></goals></execution><execution><id>default-report</id><goals><goal>report</goal></goals></execution><execution><id>default-check</id><goals><goal>check</goal></goals><configuration><rules><rule><element>BUNDLE</element><limits><limit><counter>COMPLEXITY</counter><value>COVEREDRATIO</value><minimum>0.60</minimum></limit></limits></rule></rules></configuration></execution></executions></plugin>
  • 实战1,选择一个简单的项目:
git clone https://github.com/SonarSource/sonar-scanning-examples.git
cd sonar-scanning-examples/sonarqube-scanner-maven/maven-basic
mvn clean test jacoco:report
# 不依赖jacoco插件安装
mvn clean org.jacoco:jacoco-maven-plugin:prepare-agent test org.jacoco: jacoco-maven-plugin:report
open target/site/jacoco/index.html

在这里插入图片描述
在这里插入图片描述
把这个文件打开,长的如下:
在这里插入图片描述
点进去
在这里插入图片描述
在这里插入图片描述

  • 实战2:选择个复杂的。步骤跟上面差不多,就是多添加了一点参数
cd $START SPRING IO HOME/start-site
mvn clean jacoco:prepare-agent test jacoco:report -Dmaven.gitcommitid.skip=true Dtest=JavaVersionProjectDescriptionCustomizerTests#java8IsMandqtoryMaven
open target/site/jacoco/index.html
#不依jacoco插件安装 
# gitcommitid.skip=true 跳过commitid校验
# Dtest=JavaVersionProjectDescriptionCustomizerTests 只跑单个文件
mvn clean org.jacoco:jacoco-maven-plugin:LATEST:prepare-agent test org.jacoco:jacoco-maven-plugin:LATEST:report -Dmaven.gitcommitid.skip=true -Dtest=JavaVersionProjectDescriptionCustomizerTests#java8IsMandatoryMaven
open target/site/jacoco/index.html

在这里插入图片描述
看结果
在这里插入图片描述

  • 如果在执行过程中想卡分支覆盖率指标,可以在execution中找到check进行相关配置,类似sonarqube的quality gates
    在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

DPDK e1000 ring buffer

基本原理 如图&#xff08;盗图&#xff09; 内存&#xff08;RAM&#xff09;和网卡&#xff08;NIC&#xff09;之间通过Descriptor ring 交互网络报文数据内存中需要申请内存 packet buffer 的内存池&#xff0c;内存池中的每个实例&#xff0c;地址是物理连续的或者IOVA…

干货分享:搭建AI知识库的5款工具推荐

如何有效地管理、整合和利用信息是每个人都会遇到的问题。AI知识库凭借其强大的智能化管理和便捷的AI搜索功能&#xff0c;成为了很多人会选择的工具。今天&#xff0c;我将分享5款搭建AI知识库的实用工具给大家&#xff0c;帮助大家选择最适合的搭建AI知识库的工具&#xff0c…

【强训笔记】day20

NO.1 思路&#xff1a;先判断能对砍几个回合&#xff0c;取最小值&#xff0c;因为回合数是整数&#xff0c;所以可能存在都大于0的情况&#xff0c;再判断一下如果都存活就再对砍一次&#xff0c;直到一家存活或者都死亡。 代码实现&#xff1a; #include<iostream>u…

问题:幂等性 分布式session

web项目中请求线程到service层的时候远程调用服务之前是串行化执行每个任务都要get阻塞等待任务完成&#xff0c;举例当用户在购物车页面点击去结算就会请求后台toTrade请求获取订单确认的详情数据并渲染到订单详情页&#xff0c;现在在toTrade请求中使用异步任务编排Completab…

山东大学软件学院创新项目实训开发日志——第11周

山东大学软件学院创新项目实训开发日志——第11周 项目名称&#xff1a;ModuFusion Visionary&#xff1a;实现跨模态文本与视觉的相关推荐 -------项目目标&#xff1a; 本项目旨在开发一款跨模态交互式应用&#xff0c;用户可以上传图片或视频&#xff0c;并使用文本、点、…

大华智能物联综合管理平台 fastjson远程代码执行漏洞复现

0x01 产品简介 大华ICC智能物联综合管理平台对技术组件进行模块化和松耦合,将解决方案分层分级,提高面向智慧物联的数据接入与生态合作能力。 0x02 漏洞概述 由于大华智能物联综合管理平台使用了存在漏洞的FastJson组件,未经身份验证的攻击者可利用 /evo-runs/v1.0/auths/…

【Delphi 爬虫库 6】使用正则表达式提取猫眼电影排行榜top100

正则表达式库的简单介绍 正则表达式易于使用&#xff0c;功能强大&#xff0c;可用于复杂的搜索和替换以及基于模板的文本检查。这对于输入形式的用户输入验证特别有用-验证电子邮件地址等。您还可以从网页或文档中提取电话号码&#xff0c;邮政编码等&#xff0c;在日志文件中…

数据结构深入理解--栈

目录 一、栈的定义 二、栈的实现 2.1 栈的结构 2.2 栈的初始化 2.3 栈的销毁 2.3 栈元素的插入 2.4 栈元素的删除 2.5 栈顶元素获取 2.6 栈元素有效个数获取 2.7 栈是否为空判断 三、代码总览 Stack.h Stack.c 测试代码:test.c 四、例题 例一&#xff1a; 例二&#xff…

Redis基础面试知识点(1)

相比于C字符串&#xff0c;SDS的优势&#xff1a; O(1)获取字符串的长度不会缓冲区溢出减少修改字符串时所需的内存重新分配的次数&#xff08;空间预分配、惰性空间释放&#xff09;二进制API安全&#xff08;通过len获取长度&#xff09;兼容部分C字符串函数 Redis hash策略…

全新神经网络架构KAN——本文用于学习与探索

论文地址&#xff1a;https://arxiv.org/pdf/2404.19756 Github&#xff1a;GitHub - KindXiaoming/pykan: Kolmogorov Arnold Networks 文档说明&#xff1a;Welcome to Kolmogorov Arnold Network (KAN) documentation! — Kolmogorov Arnold Network documentation 本文仅…

Linux进程间通信 pipe 实现线程池 命名管道 实现打印日志 共享内存代码验证 消息队列 信号量

文章目录 前言管道匿名管道 pipe测试管道接口 --> 代码验证管道的4种情况管道的5种特征 线程池案例代码实现&#xff1a;ProcessPool.ccTask.hpp检测脚本makefile 命名管道代码演示&#xff1a;makefilenamedPipe.hppserver.ccclient.cc 实现日志Log.hpp 共享内存共享内存原…

【JavaSE】/*运算符—快速总结*/

目录 前言 一、什么是运算符 二、算术运算符 三、增量运算符 四、自增/自减运算符 五、关系运算符 六、逻辑运算符 七、位运算符 八、移位运算符 九、条件运算符 十、运算符的优先级 前言 Java 中的运算符和 C语言 的运算符规则有很多类型的地方&#xff0c;我们只…

视频监控系统中,中心录像服务器的录像文件实际大小和理论值相差很大的问题解决

目录 一、现象描述 二、视频监控的录像文件计算 &#xff08;一&#xff09;计算方法 1、仅视频部分 2、视频和音频部分 3、使用平均码率 &#xff08;二&#xff09;计算工具 1、关注威迪斯特公众号 2、打开“计算容量”的小工具 三、原因分析 &#xff08;一&…

【Win10点击任务栏刷屏,卡死转圈(亲测有效)】

计算机疑难杂症001 Win10点击任务栏刷屏&#xff0c;卡死转圈(亲测有效)1、问题状况2、问题原因3、问题解决 Win10点击任务栏刷屏&#xff0c;卡死转圈(亲测有效) 1、问题状况 在偶然间&#xff0c;发现任务栏点不动了&#xff0c;点击无反应&#xff0c;再多点击几次&#x…

颍川诞生了两个帝王的仲父

伯、仲、叔、季是古代兄弟的长幼排行顺序&#xff0c;《释名释亲属》载&#xff1a;“父之弟曰仲父……仲父之弟曰叔父”。也就是古代称父亲的兄弟为仲父&#xff0c;多用于帝王对宰相重臣的尊称。 历史上最有名的、有正史记载的帝王“仲父”有两位&#xff0c;而且都出自颍川…

nc生成临时凭证配置

nc生成临时凭证配置 要实现的功能&#xff1a; 审批时生成临时凭证弃审时删除临时凭证 前台配置 后台配置 BillReflectorServiceImpl.java package nc.pubimpl.jych.qtsq.voucher;import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; impo…

LeetCode 106.从中序与后序遍历序列构造二叉树

LeetCode 106.从中序与后序遍历序列构造二叉树 1、题目 题目链接&#xff1a;106. 从中序与后序遍历序列构造二叉树 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并…

Scala编程入门:从零开始的完整教程

目录 引言环境准备创建第一个Scala项目基本语法高阶概念进阶资源结语 引言 Scala是一种强大的、静态类型的、多范式编程语言&#xff0c;它结合了面向对象和函数式编程的特点。本教程将指导您如何从零开始学习Scala&#xff0c;并搭建一个简单的开发环境。让我们开始探索Scala…

搭建一个Xx431?

搭建一个Xx431? 嘿uu们!刚结束了一周六天班感觉如何? 我的状态倒还行,工作生活总能找到乐子,本周整活就是用纸巾和蛋糕托做的油灯,另外想制冷片做个温水冷水可调的杯托,但我还不会搞3d,希望今年能搞起来. 题外话就说到这,这个选题也是因为实际遇到的问题需要这玩意,下班路…

配置Docker对象与管理守护进程

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 本章节的快速目录导航&#xff1a; 一、配置Docker对象 1.1、Docker对象的标记 1.2、格式化命令和日志的输出 二、示例&#xff1a; 2.1、管理…