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绘图技巧的全部内容,有…...
手写Spring与基本原理--简易版
文章目录 手写Spring与基本原理解析简介写一个简单的Bean加载容器定义一个抽象所有类的BeanDefinition定义一个工厂存储所有的类测试 实现Bean的注册定义和获取基于Cglib实现含构造函数的类实例化策略Bean对象注入属性和依赖Bean的功能Spring.xml解析和注册Bean对象实现应用上下…...
EasyNTS端口穿透服务新版本发布 0.8.7 增加隧道流量总数记录,可以知晓设备哪个端口耗费流量了
EasyNTS上云平台可通过远程访问内网应用,包含网络桥接、云端运维、视频直播等功能,极大地解决了现场无固定IP、端口不开放、系统权限不开放等问题。平台可提供一站式上云服务,提供直播上云、设备上云、业务上云、运维上云服务,承上…...
python自动合计各部周销
下载依赖 pip install openpyxl -i https://pypi.doubanio.com/simplepip install pandas -i https://pypi.doubanio.com/simple引入依赖 from openpyxl import load_workbook from openpyxl import styles from openpyxl.styles import * import pandas as pd import string…...
Java内存区域与内存溢出异常
Java与C++之间有一堵由内存分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来。 2.1 概述 对于从事C、C++程序开发的开发人员来说,在内存管理领域,他们即是拥有最高权力的“皇帝”,又是从事最基础工作的劳动人民——即拥有每一个对象的“所有权”,又…...
远程网络唤醒家庭主机(openwrt设置)
远程网络唤醒家庭主机(openwrt设置) 前提: 1.配置好主板bios的网络唤醒功能(网络教程自己百度一下找) 2.电脑开启网络唤醒功能(网络教程自己百度一下找) 3.路由器通过ddns实现域名和动态IP绑定内网穿透方法汇总_不修改光猫进行内网穿透-C…...
Spring知识02
1、这边是做单元测试的 2、项目部署上线的时候需要把Test那里注解掉 3、pom.xml的坐标系,用来导出包给别人用 4、项目名称,artifactId,name属性名保持一致 5、maven中央仓库那里可以看到导包之后会随着附加的内容 6、class.getSingleName获取…...
Linux服务器搭建笔记-006:拓展/home目录容量
一、问题说明 Ubuntu服务器在使用过程中创建的新用户,每位用户会在/home目录下生成一个属于其个人的主文件夹。如果不限制各个用户的使用空间,所有的用户都会共用/home所挂载的硬盘。在这种多用户情况下,会很快的填满/home目录,导…...
元宇宙与VR虚拟现实的未来如何?
从科幻小说到商业现实 自从 Facebook年更名为 Meta 以来,关于元宇宙的热议不断,人们对虚拟世界的兴趣也重新燃起,因为尽管虚拟现实 (VR) 的概念由来已久,但该技术现在才开始真正得以应用。 定义元宇宙和虚拟现实 首先是 The Met…...
微服务事务处理:CAP 定理和最终一致性的关系
CAP 定理和最终一致性 CAP 定理和最终一致性是两个密切相关的概念,但它们在范围和细节上有所不同。以下是比较: CAP 定理 **正式陈述:**在分布式系统中,最多只能同时满足以下三个保证中的两个:一致性、可用性和分区…...
【Linux操作系统】探秘Linux奥秘:操作系统的入门与实战
🌈个人主页:Sarapines Programmer🔥 系列专栏:《操作系统实验室》🔖诗赋清音:柳垂轻絮拂人衣,心随风舞梦飞。 山川湖海皆可涉,勇者征途逐星辉。 目录 🪐1 初识Linux OS …...
嘉兴网站建设999 999/下载百度到桌面上
Docker 完全指南 原作者地址: https://wdxtub.com/2017/05/01/docker-guide/ 发表于 2017-05-01 | 更新于 2017-08-03 | 分类于 Technique | | 1669 3,950 | 15Docker 作为新瓶装旧酒的一门技术,用简单便捷的操作极大改变了软件开发的流程与生态环境࿰…...
wordpress hack 主题/郑州seo管理
这是一份精美的PPT模板设计,采用马卡龙配色,整体简约,并且带上了粉红的小女风,一份设计精美的PPT模板,可以让你在汇报演讲时脱颖而出, 模板格式:pptx格式(可随意下载编辑࿰…...
光明网/网站关键词优化怎么弄
11、String s "xyz"和String s new String("xyz");区别String s new String("xyz");可能创建两个对象也可能创建一个对象。如果常量池中有hello字符串常量的话,则仅仅在堆中创建一个对象。如果常量池中没有hello对象,则…...
销售网站开发与设计现状/前端seo是什么意思
全局变量什么是全局变量?全局变量就好比一个容器或者一个公用的东西一样,就类似外面公共场所的凳子一样,大家都可以使用这个凳子。和他相反的局部变量是啥子东东呢?局部变量就是局部的东西,如果全局变量是桌子…...
企业免费网站建设哪个品牌好/站长统计性宝app
在VMWare主页中选取新建虚拟机选项卡 2.在新建虚拟机向导中设置安装来源取决于安装方式.如果是通过光盘安装,则选择第一项.这里我使用ISO映像安装,输入用户名密码和密钥一路下一步就可以安装成功.3.安装成功如下图4.下面开始安装VMWare Tools工具点击 VMWare客户端的 虚拟机…...
泉州手机端建站模板/惠州网站seo
今天编写一份Python基础代码,经过Linux上传到github上,遇到点问题,已经解决1.首先sudo su 进入root 用户2.ls 检查出当前文件下有什么文件3. cd 进入你将要上传的文件夹下4.git init(在本机上想要创建一个新的git仓库)5.git add -A(这里的-A是…...