Java中的单元测试
单元测试
单元测试概述:
单元测试是指在软件开发中对软件的最小可测试单元进行测试和验证的过程。最小可测试单元通常是指函数、方法或者类,单元测试可以保证开发人员的代码正确性,同时也方便后期维护和修改。单元测试的主要目的是检测代码的正确性,确保单个函数或方法的输入和输出正确无误,同时减少开发中的错误和错误的影响。单元测试还可以帮助程序员理解代码的调用和流程,提高程序员的开发效率。单元测试可以自动化执行,提高测试效率和准确性,同时减少手动测试的工作量。
单元测试特点:
单元测试的特点如下:
-
自动化:单元测试必须是自动化的,即通过脚本或工具可以快速执行,避免人工操作和误差。
-
隔离性:每个单元测试应该是相互独立的,能够单独运行。每个测试用例应该测试一个独立的、小的功能单元,避免对其他模块的影响。
-
可重复性:单元测试应该是可重复的,即每次运行结果应该一致。这样可以保证测试结论的准确性。
-
快速性:单元测试应该迅速执行,尽可能在几毫秒或几秒钟内完成执行,以便及时发现缺陷。
-
测试质量:单元测试应该覆盖到尽可能多的代码逻辑,以便在保证测试质量的同时尽早发现缺陷。
-
易于维护:单元测试的维护成本要低于修复缺陷的成本,因此单元测试需要易于维护和修改。
单元测试的使用步骤:
单元测试的使用步骤通常包括以下几个步骤:
-
选择合适的测试框架:选择合适的测试框架是进行单元测试的第一步,常见的测试框架有JUnit、TestNG、pytest等。
-
编写测试用例:针对待测试的代码编写测试用例,测试用例应该覆盖代码的各种情况,并尽可能地涵盖异常情况。
-
执行测试用例:执行测试用例,对代码进行测试,记录测试结果。
-
分析测试结果:根据测试结果,查找并修复代码中的问题。
-
重复执行测试用例:修改后的代码需要再次执行测试用例,确保修复问题后代码没有引入新的问题。
-
集成测试:对多个单元进行集成测试,确保整体的功能逻辑和业务流程都能够正确运行。
-
持续集成:通过持续集成工具(如Jenkins)将单元测试集成到项目的自动化构建流程中,确保每次代码变更都经过了单元测试的验证。
单元测试相关注解及用法:
单元测试相关注解及用法如下:
@Test
用于标识测试方法,表示该方法是一个单元测试方法。使用该注解后,JUnit就会在执行测试时运行这个方法。
@Before
用于标识在测试方法之前需要运行的方法。通常在该方法中初始化测试用的对象或是环境。
@After
用于标识在测试方法之后需要运行的方法。通常在该方法中清理测试用的对象或是环境。
@BeforeClass
用于标识在所有测试方法之前需要运行的方法。该方法会在测试类被创建的时候执行一次,并且只会执行一次。
@AfterClass
用于标识在所有测试方法之后需要运行的方法。该方法会在测试类被销毁的时候执行一次,并且只会执行一次。
@Ignore
用于标识测试方法不需要执行,通常用于修复bug等情况下暂时不需要执行的测试方法。
@RunWith
用于指定测试运行器,JUnit默认使用的是BlockJUnit4ClassRunner,可以通过该注解进行修改。
@Parameters
用于指定测试方法的参数化,可以为测试方法提供多组参数进行测试。
@Rule
用于声明测试规则,JUnit提供了一些测试规则可以帮助我们进行一些常用操作,比如重复测试、超时测试等。该注解需要和@ClassRule或@MethodRule配合使用。
断言的应用:
断言(Assertion)是一种用于判断程序执行结果是否符合预期的技术,它是单元测试的核心之一。在单元测试中,我们会编写一些测试用例,每个测试用例会执行一些代码,并使用断言来验证代码的执行结果是否符合预期。
在 Java 中,JUnit 是最流行的单元测试框架,它提供了一些断言方法,常用的有以下几种:
- assertEquals(expected, actual):判断两个值是否相等,如果不相等会抛出 AssertionError 异常。例如:
int result = add(1, 3); // 假设 add 方法返回 4
assertEquals(4, result);
- assertTrue(boolean condition):判断一个表达式的返回值是否为 true,如果为 false 会抛出 AssertionError 异常。例如:
boolean result = isPositiveNumber(5);
assertTrue(result);
- assertFalse(boolean condition):同 assertTrue 方法,判断一个表达式的返回值是否为 false。
boolean result = isPositiveNumber(-1);
assertFalse(result);
- assertNull(Object obj):判断一个对象是否为 null,如果不为 null 会抛出 AssertionError 异常。例如:
String str = null;
assertNull(str);
- assertNotNull(Object obj):同 assertNull 方法,判断一个对象是否不为 null。
String str = "Hello";
assertNotNull(str);
通过合理使用断言可以有效地提高单元测试的效率,帮助我们快速发现并定位代码中的问题。不过需要注意的是,过多或过少使用断言都不是好的选择,需要根据实际情况进行取舍。
相关文章:
Java中的单元测试
单元测试 单元测试概述: 单元测试是指在软件开发中对软件的最小可测试单元进行测试和验证的过程。最小可测试单元通常是指函数、方法或者类,单元测试可以保证开发人员的代码正确性,同时也方便后期维护和修改。单元测试的主要目的是检测代码的正确性&am…...
143.【Nginx-02】
Nginx-02 (五)、Nginx负载均衡1.负载均衡概述2.负载均衡的原理及处理流程(1).负载均衡的作用 3.负载均衡常用的处理方式(1).用户手动选择(2).DNS轮询方式(3).四/七层负载均衡(4).Nginx七层负载均衡指令 ⭐(5).Nginx七层负载均衡的实现流程 ⭐ 4.负载均衡状态(1).down (停用)(2)…...
代码随想录刷题 | Day2
今日学习目标 一、基础 链表 接下来说一说链表的定义。 链表节点的定义,很多同学在面试的时候都写不好。 这是因为平时在刷leetcode的时候,链表的节点都默认定义好了,直接用就行了,所以同学们都没有注意到链表的节点是如何定…...
C++ enum class 如何使用
enum class 是 C11 引入的一种新的枚举类型,它是对传统 C 风格的枚举的一种改进。enum class 提供了更强大的类型安全性和作用域限定。以下是关于 enum class 的详细介绍和用法说明: 1. 基本语法 enum class EnumName {Enumerator1,Enumerator2,// ...…...
攻防技术-单包攻击防范:扫描、畸形、特殊(HCIP)
单包攻击类型介绍 一、扫描窥探攻击 1、地址扫描攻击防范 攻击介绍 运用ping程序探测目标地址,确定目标系统是否存活。也可使用TCP/UDP报文对目标系统发起探测(如TCP ping)。 防御方法 检测进入防火墙的ICMP、TCP和UDP报文,根…...
基于 Vue3 和 WebSocket 实现的简单网页聊天应用
首先附上项目介绍,后面详细解释技术细节 1. chat-websocket 一个基于Vue3和WebSocket的简易网络聊天室项目,包括服务端和客户端部分。 项目地址 websocket-chat 下面是项目的主要组成部分和功能: 项目结构 chat-websocket/ |-- server/ # WebSocket 服…...
【MYSQL】MYSQL 的学习教程(八)之 12 种慢 SQL 查询原因
日常开发中,我们经常会遇到数据库慢查询。那么导致数据慢查询都有哪些常见的原因呢?今天就跟大家聊聊导致 MySQL 慢查询的 12 个常见原因,以及对应的解决方法: SQL 没加索引SQL 索引失效limit 深分页问题单表数据量太大join 或者…...
C语言例题3
1.设x、y、z和k都是int型变量,则执行表达式:x(y4,z16,k32)后,x的值为(32); x(y4,z16,k32),x的值为32 理解逗号运算符在c语言中的工作方式:逗号运算…...
很实用的ChatGPT网站——httpchat-zh.com
很实用的ChatGPT网站——http://chat-zh.com/ 今天介绍一个好兄弟开发的ChatGPT网站,网址[http://chat-zh.com/]。这个网站功能模块很多,包含生活、美食、学习、医疗、法律、经济等很多方面。下面简单介绍一些部分功能与大家一起分享。 登录和注册页面…...
Python函数中的*args,**kwargs作用与用法
前言 最近在使用Python函数的时候,经常碰见函数中使用*args、**kwargs,而且参数的传递也是非常奇特,就特意对Python函数中*args、**kwargs进行了查询,下面就以实例进行说明。 1 Python中的*args、**kwargs 在 Python 中&#x…...
python可视化界面自动生成,python如何做可视化界面
大家好,小编来为大家解答以下问题,python gui可视化操作界面制作,python做出的炫酷的可视化,现在让我们一起来看看吧! 目录 前言 一.环境配置 插件: 1.python 2.Chinese 3.Open In Default Browser 安装pyt…...
力扣热题100道-双指针篇
文章目录 双指针283.移动零11.盛最多水的容器15.三数之和42.接雨水 双指针 283.移动零 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 …...
数据库一般会采取什么样的优化方法?
数据库一般会采取什么样的优化方法? 1、选取适合的字段属性 为了获取更好的性能,可以将表中的字段宽度设得尽可能小。 尽量把字段设置成not null 执行查询的时候,数据库不用去比较null值。 对某些省份或者性别字段,将他们定义为e…...
编程笔记 html5cssjs 015 HTML列表
编程笔记 html5&css&js 015 HTML列表 一、有序列表例1:例2: 二、无序列表例1:例2: 列表是一种特定文字格式,很常用。 HTML 列表。HTML 支持有序、无序和定义列表。 一、有序列表 例1: <!DOCTY…...
【力扣题解】P404-左叶子之和-Java题解
👨💻博客主页:花无缺 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 花无缺 原创 收录于专栏 【力扣题解】 文章目录 【力扣题解】P404-左叶子之和-Java题解🌏题目描述💡题解🌏总结…...
elasticsearch 索引数据多了怎么办,如何调优,部署
当Elasticsearch索引的数据量增加时,可能会遇到性能瓶颈,需要进行调优。以下是一些建议和步骤,可帮助你处理数据量增加的情况: 1. 硬件升级: 增加节点数或升级硬件,包括更快的CPU、更大的内存和更快的存储…...
Spring Cloud Gateway之Predicate断言详解
目录 Predicate(断言)内置Predicate请求参数匹配请求路径匹配Header 属性匹配Cookie 匹配请求方式匹配请求 ip 地址匹配时间匹配组合匹配 Predicate(断言) 在 Spring Cloud Gateway 中,Predicate(断言&…...
JavaScript中的prototype和_proto_的关系是什么
JavaScript中的prototype和_proto_的关系是什么 __proto__ 是 JavaScript 中对象的一个内部属性,它指向该对象的原型。JavaScript 中每个对象都有一个 __proto__ 属性,通过它可以访问对象的原型。prototype 是函数对象特有的属性,每个函数都…...
机器学习(二) -- 数据预处理(3)
系列文章目录 未完待续…… 目录 前言 tips:这里只是总结,不是教程哈。本章开始会用到numpy,pandas以及matplotlib,这些就不在这讲了哈。 “***”开头的是给好奇心重的宝宝看的,其实不太重要可以跳过。 此处以下所有…...
【数学建模美赛M奖速成系列】Matplotlib绘图技巧(三)
Matplotlib绘图技巧(三) 写在前面7. 雷达图7.1 圆形雷达图7.2 多边形雷达图 8. 极坐标图 subplot9. 折线图 plot10. 灰度图 meshgrid11. 热力图11.1 自定义colormap 12. 箱线图 boxplot 写在前面 终于更新完Matplotlib绘图技巧的全部内容,有…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...
免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...
