查看单元测试用例覆盖率新姿势:IDEA 集成 JaCoCo

IDEA 集成 JaCoCo

1、什么是 IDEA

IDEA 全称 IntelliJ IDEA,是 Java 编程语言开发的集成环境。IntelliJ 在业界被公认为最好的 Java 开发工具,尤其在智能代码助手、代码自动提示、重构、JavaEE 支持、各类版本工具(git、SVN 等)、JUnit、CVS 整合、代码分析、 创新的 GUI 设计等方面的功能可以说是超常的。

2、什么是 JaCoCo

JaCoCo 是一个免费、开源 Java 代码覆盖率工具。

3、IDEA 为什么要集成 JaCoCo

方便查看单元测试用例覆盖率。

4、集成步骤

4.1、被测类

注意:被测类要放在 main 下面,而不是 test 下面

图片

4.2、单元测试用例

注意:单元测试类(CalcTest)必须和被测类(Calc)在同一个包下(com.lemon.testng)

图片

4.3、配置 Code Coverage

图片

选择 Edit Configurations

图片

选择 Code Coverage,再选择 JaCoCo

图片

右键选择 Run with Coverage

图片

自动弹出代码覆盖率界面

4.4、覆盖率报表

报表相对简单,Class 表示类覆盖率,Method 表示方法覆盖率,Line 表示行覆盖率

图片

4.5、代码覆盖情况

单元测试用例主只写了 add 方法,所以 add 方法显示绿色,覆盖状态,sub 方法显示红色,未被覆盖。

在这里插入图片描述

新增一个 sub 方法测试用例,再来看结果。

在这里插入图片描述

首先 Method 从 1 变成 2,Line 数也增多了。

在这里插入图片描述

其次,sub 方法颜色也有变化,if 仍是红色, 但是 else 变成绿色,说明 eles 分支被覆盖。

在这里插入图片描述

5、总结

通过上述例子可以看出,通过查看覆盖率,逐步善测试用例,写出的用例至少能保障每个分支都被执行,相比通过需求写用例更能排查出潜在 bug。

需求 ≠代码,不能仅围绕需求写用例,借助 JaCoCo 覆盖率工具编写用例,更符合实际工作需求,更省心省力。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:【文末小卡片领取】

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!


http://www.ppmy.cn/ops/106893.html

相关文章

Keil5如何使用GCC工具链编译输出静态库.a文件

一、点击进入GCC工具链下载地址 GCC工具链下载地址, 按需下载,我下的是这个 二、解压后放到这个位置 三、配置使用GCC编译器 四、配置GCC编译规则 Define中写: USE_STDPERIPH_DRIVER,STM32F40XX Misc Controls中写:-mcpucorte…

【生日视频制作】白色卡车行万里路车身改字1版AE模板修改文字软件生成器教程特效素材【AE模板】

生日视频制作教程白色卡车行万里路车身改字1版AE模板修改文字特效广软件告生成神器素材祝福玩法AE模板工程 怎么如何做的【生日视频制作】白色卡车行万里路车身改字1版AE模板修改文字软件生成器教程特效素材【AE模板】 生日视频制作步骤: 安装AE软件 下载AE模板 把…

【网络世界】网络层

目录 🌈前言🌈 📁 网络层 📁 IPV4 📂 什么是IP地址 📂 网段划分 📂 特殊IP 📂 内网和公网 📂 IPV4的危机 📁 IP协议格式 📁 路由 &#x1f…

ADC——模数转换器

一、转换流程 在处理器中主要进行ADC 1、AD转换流程 :采样、保持、量化、编码 通过比较器获得的电信号转换数字信号,根据自己需求,如果要求速率就可以使用较多的比较器,不要求速率考虑成本就可以使用较少的比较器,将最…

安全随机数生成指南

引言 随机数生成在计算机科学中是一个关键过程,尤其在安全性要求高的领域,如密码学中,随机数的质量直接影响系统的安全性。生成高质量的随机数不仅依赖于算法,还与熵源(entropy source)的选择密切相关。本…

TCP 和 UDP 区别

UDP UDP(用户数据报协议,User Datagram Protocol)是一种无连接的网络传输协议,提供了简单的消息传送服务。UDP位于传输层,允许应用程序向其他主机发送封装在IP数据报中的消息,而无需先建立连接。由于UDP不…

2024/9/4黑马头条跟学笔记(二)

app端文章列表 学习内容 需求分析 上方分类频道切换 布局,无图,单图,三张图 文章数据库表 导入文章数据库 结构分析 配置-文章 一对一,拆表,冷热数据分离满足范式 表的拆分-垂直分表 优势 查文章信息不会连带查…

内存卡不小心格式化了有办法恢复数据吗?

在数字时代,内存卡作为便携式存储设备,广泛应用于手机、相机等设备中。然而,由于操作不当或设备故障,内存卡有时会被不小心格式化,导致存储在其中的重要数据丢失。 面对这种情况,许多人可能会感到焦虑&…

前端发送邮件至指定邮箱的方式方法有哪些?

前端发送邮件的教程指南?前端静态页面怎么发送邮件? 无论是用户反馈、订阅通知还是其他形式的通信,前端发送邮件的功能都显得尤为重要。AokSend将详细介绍几种常见的前端发送邮件的方法,帮助开发者更好地实现这一功能。 前端发送…

鸿蒙开发入门day06-ArkUI简介

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,还请三连支持一波哇ヾ(@^∇^@)ノ) 目录 ArkUI简介 基本概念 两种开发范式 不同应用类型支持的开发范式 …

<数据集>车辆识别数据集<目标检测>

数据集格式:VOCYOLO格式 图片数量:3002张 标注数量(xml文件个数):3002 标注数量(txt文件个数):3002 标注类别数:21 标注类别名称:[ambulance, army vehicle, auto rickshaw, bicycle, bus, car, garba…

磁盘调度管理中移臂调度和旋转调度

在磁盘调度管理中,移臂调度和旋转调度是两种不同的优化调度方法,用来提高磁盘读写效率。我们可以通过以下两种方式来理解它们: 1. 移臂调度(Seek Scheduling) 移臂调度是指磁盘驱动器的磁头在不同的柱面(…

JVM类加载机制与双亲委派模型解析

JVM类加载机制与双亲委派模型解析 在Java虚拟机(JVM)中,类加载机制是其核心组成部分之一,它负责将类(.class文件)加载到JVM的方法区内,并在需要时初始化这些类。本文将深入探讨JVM的类加载机制…

WPF性能优化之UI虚拟化

文章目录 前言一、VirtualizingStackPanel1.1 虚拟化功能介绍1、在Window中添加一个ListBox控件。2、在设计视图中用鼠标选中ListBox控件并右健依次单击“编辑其他模板”-“编辑项的布局模板”-“编辑副本”。3、查看生成的模板代码。 1.2 虚拟化参数介绍…

win11下wsl使用开发pg拓展并安装到docker全程记录

折腾了大半天,记录下rust开发pg拓展并安装到生产docker全程: 使用pgrx开发过程省略,注意和生产pg版本对上,我的是pg14 开发的终点是cargo pgrx package ,我的项目叫first,那么项目目录下 /target/release/first-pg14/usr/share/postgresql/14/extension/ 会生成一个sql和一个c…

【甲方安全建设】富文本编辑器XSS漏洞攻击及防御详析

原创文章,禁止转载。 文章目录 调研背景搭建TinyMCE富文本编辑器靶场富文本编辑器前端过滤富文本编辑器后端攻击后端弱过滤弱过滤1弱过滤2后端有效过滤从甲方的视角看动态安全调研背景 随着Web 2.0技术的普及,富文本编辑器在各种Web应用中得到了广泛应用,用户、网站管理员等…

太极八卦图时钟屏保 这个电脑屏保很有个性哦 你喜欢吗?

太极八卦图时钟屏保 这个电脑屏保很有个性哦 你喜欢吗?今天小编给大家带来一个非常好看的电脑屏保软件:芝麻时钟;https://clock.zhimasoft.cn/ 太极八卦图时钟屏保 小编在网上看到很多人找八卦时钟屏保,发现这个非常有特色&#…

tekton构建标准ci(clone repo, test, build push img)

场景介绍 我们在上一篇文章中构建了一个最简单的ci,接下来我们对我们的github的项目构建一个较标准的ci。 Tekton简介,安装和构建最简单ci/cd-CSDN博客文章浏览阅读239次,点赞2次,收藏2次。本文介绍了tekton是什么,如…

我问Chat GPT:怎么提交app到苹果商店审核

ChatGPT 说: ChatGPT 将应用提交到苹果应用商店 (App Store) 进行审核是一个多步骤的过程,以下是详细步骤: 1. 准备工作 在提交应用之前,请确保完成以下准备工作: 创建 App Store 连接账号: 确保您已经…

力扣2.两数相加

class Solution {public ListNode addTwoNumbers(ListNode h1, ListNode h2) {ListNode ans null, cur null;int carry 0;for (int sum, val; h1 ! null || h2 ! null;h1 h1 null ? null : h1.next,h2 h2 null ? null : h2.next) {sum (h1 null ? 0 : h1.val) (h2 …