单元测试我们需要知道哪些?

news2024/11/24 14:53:12

前言

趁着刚读完《认知天性》这书,书有一点这样说:「我们学习行为更多凭着直觉,即使我们已经看到了科学数据,但我们也不愿意去相信自己的直觉存在问题。」那和我们单元测试有什么关系呢?

这时我突然有一个问题:「什么情况下你会进行单元测试?(除掉你心情好的时候)」

在完全不清楚的情况下,我的第一反应自然是不知道,以及好奇为什么要去单元测试?听说实践起来会产生优越感,会心动一下,那要不要学。

又有几个问题:你对你的代码很信任吗?你如何检测代码运行良好的呢?你还记得昨晚10点在做什么吗?你信任你的记忆力吗?

当然作为工程师的我们,凭借一丝不苟的工作素养,自然在敲击键盘的那一刻都有一刹那觉得写的真好。但时间一天又一天的过去了,突然有一天产品要优化原有功能,那时候你还记得具体功能的实现细节吗?

如果你记性好,你或许记得,但如何验证你真的记得呢?

是个人源自心中强大的自信吗?还是测试环境跑一跑,看看有没有问题呢?

应该都不是,而是要有一份数据告诉自己。这份数据应该是功能的测试数据集合。那如何获取这份数据呢?

还记得学生时代的你我吗?每个学期都会有期中、期末测试,而这些测试就是验证自己这个阶段对学过知识的收获如何,最终成绩就是测试所得的数据。

综上所述,并非时常理性的我们,并不能准确的预估自己能力如何,尤其在我们处理特殊情况下,评估水平和实际水平相差更大,所以我们需要有「外部设备」帮助我们去衡量水平。编写的代码也是同理,而这时的「外部设备」就是测试。而单元测试就是最简便的的测试手段。

单元测试

小例子

不急入题,先看一个小例子。

假设你在一家电视组装厂上班,你的工作任务就是组装电视机,然后检测电视是否能够正常启动。突然有一天,厂里接到紧急订单,需要下周一赶出来新型电视机。

这周一和往常一样,来到自己的车间,打开新型电视机的功能图纸,开始一步一步的组装功能电路板,比如供电板、音视频解码板、射频接收板等,然后再将这些电路板组装起来构成一个完整的电视机。

第一个新型电视机组装完成了,插上电源,居然无法开机。你检查了一下电源没有问题,那是电视机出现了问题,这时你背脊一凉,叫来了主管述说情况和你的怀疑。负责人和你便到组装合机流水线,随机抽取了一台电视机进行测试发现现象如你一般,便叫停改流水线的组装工作。

你回到工位,立即把电视机拆了,依次对每一个功能电路板进行测验其功能是否正确,结果你发现是供电板存在故障,拆解电路板对其电子元件进行测试,最终发现是某批次电容器故障,然后查看同批次电容元件,发现都存在此类问题。然后拿具体测试结果交给主管,主管联系提供商顺利解决了问题。化解了此次危机。

但是此类问题,如何能在后续生产中避免呢?你向主管提了建议,虽然我司采购元件都遵循国际标准,但防止此类问题出现,需要有人提前对同批次不同元件进行测试,然后组装进行测试。主管欣然接受建议,然后笑着对你说,那这项任务就交给你了。

从此厂中就流传一个都市传说,每当工厂加工新型电视机的前一晚,在工厂中都回荡男性的哭泣声。

例子讲完了,回顾一下为什么讲这个例子。细看是不是会发现仿佛和我们的工作很类似,或许我们排查问题的方式并非像传统工业一般,但原理相同。若中途环境添加测试,确实会保障我们后续代码质量以及在排查问题上应将目光偏向于何处。

不知道现在的你对于单元测试是什么?以及为什么我们要有单元测试?有一个感性的认识呢?

什么是单元测试?

工程测试种类繁多,而根据涉及工程范围大小而言,单元测试是最小的维度。那这样说来,单元测试是不是较为简单且不需要花费太多精力就能够进行的呢?

其维基上具体定义如下:

是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。

而什么又是单元呢?

回想组装电视机的例子,例子中的单元是组成功能板的电子元件。而我们工程项目中,最小的组成单元是什么呢?可能是一个有一个函数或是一个有一个的组件吧。

一旦在单元定义上达成一致,那你就清楚的知道该测试什么不该测什么了吧。

为什么要进行单元测试呢?

组装电视机例子中,我们进行测试的目的确保组装出来的电视机出现问题并非是某个元件异常引发的问题。也就是隔离了元件组成了功能板,且确保了单个电子元件的正确性。

而用术语来讲,单元测试的目的就是隔离了程序部件且证明单个单元部件的正确性。

根据组装电视机的例子,抽象总结单元测试的必要性:

  1. 在开发周期早期快速发现程序问题

  2. 可以让程序的底层单元更加可靠

  3. 出现问题,分析问题期间,清楚知道该关注哪些,不用关注哪些

  4. 后期程序重构,可以根据单元测验校验模块是否正确

  5. 单元测试是一种文档的集成

现在我们应该对单元测试是什么以及为什么上应该有了较为理性的认识。那你接下来的编程过程中会进行单元测试吗?

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

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取 

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

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

相关文章

19-28-hive-数据类型-DDL

19-hive-数据类型-DDL: 基本数据类型 Hive 数据类型Java 数据类型长度例子TINYINTbyte1byte 有符号整数20SMALINTshort2byte 有符号整数20INTint4byte 有符号整数20BIGINTlong8byte 有符号整数20BOOLEANboolean布尔类型,true 或者falseTRUE FALSEFLOAT…

【Python】Labelme/PIL读取图片朝向错误解决

文章目录一、问题背景二、产生原因三、解决方案一、问题背景 发现使用labelme直接读取含imageData(将图片bytes数据使用base64编码后的str数据)的json文件时,读上来的图片会发生自动旋转的问题。比如原先是横放的图,读进来后就成…

虚拟化基本知识及virtio-net初探

QEMU/KVM是在Linux中被广泛使用的虚拟化技术之一,而virtio作为一个半虚拟化I/O事实上的标准[1],是QEMU/KVM在I/O虚拟化部分的默认实现。virtio-net是virtio标准中的网卡设备,被广泛应用。本文将会沿着虚拟化,virtio半虚拟化I/O&am…

非对称风险模型

推荐模型:非对称性风险,让自己置身于一个好结果比坏结果影响大得多的环境中 比如投资,将85%~90%投入到极低风险的资产中(国债),来享受确定性收益;剩下的投入的10%~15%投入到极高风险资产中&…

使用FeatureTask多线程优化in,提高查询速度

场景是这样的:使用in查询数据的时候,in的数量越多,效率越低,所以一个优化的思路是,缩小in查询的数量,用多线程的方式查询缩小数量后in的sql,并行查询。 直接上代码: public List&l…

Linux零基础入门(四)Linux实用操作

Linux零基础入门(四)Linux实用操作前言Linux实用操作一 各类小技巧(快捷键)1 ctrl c 强制停止2 ctrl d 退出或登出3 历史命令搜索4 光标移动快捷键5 清屏二 软件安装1 Linux系统的应用商店2 yum命令3 apt命令 - 扩展三 systemct…

全光谱台灯对孩子有伤害吗?儿童用台灯的好处和坏处是什么

全光谱台灯是指灯光色谱丰富度与太阳光一般全面的台灯,这样的灯光照射下的任何物体,不但颜色丰富多彩,而且极其真实,无限接近太阳光下的真实色彩,对人眼舒适度有巨大的提升,所以全光谱台灯不但对孩子无害&a…

5G无线技术基础自学系列 | MU-MIMO原理

素材来源:《5G无线网络规划与优化》 一边学习一边整理内容,并与大家分享,侵权即删,谢谢支持! 附上汇总贴:5G无线技术基础自学系列 | 汇总_COCOgsta的博客-CSDN博客 MU-MIMO是指多个用户在上下行数据传输时…

算法实操:Python代码实现直插排序(含有序在前有序在后)

【学习的细节是欢悦的历程】Python 官网:https://www.python.org/ Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是基础那么简单…… 自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长&a…

[附源码]SSM计算机毕业设计音乐网站JAVA

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

用结构体解决实际问题中构造数据类型

用结构体解决实际问题中构造数据类型。 实验内容 (1)题目:编写input()和output()函数输入,输出5个学生的数据记录。学生数据定义如下: #define N 5struct student{ char num[6];char name[8];int score[4];} stu[N];…

anaconda安装paddle(安装CUDA,CUDNN)

前言 为什么会写这样一篇呢,应该早晚会用到paddlelite,所以paddle还是要学的,与其在飞桨平台上跑,不如在自己电脑上跑。我以为安装paddle只需要三行代码: # 打开Anaconda Prompt conda create -n paddle python3.9 c…

C++异常及异常优缺点

🧸🧸🧸各位大佬大家好,我是猪皮兄弟🧸🧸🧸 文章目录一、C语言传统的处理错误的方式二、C异常1.throw catch2.异常的抛出和捕获3.异常的抛出和捕获原则4.函数调用链 异常 栈展开匹配原则5.异常的…

微信小程序怎样开发?【小程序开发】

说到微信小程序,很多公司企业商家都会有自己的微信小程序,已经是他们的标配了。那么还没有自己的微信小程序的小伙伴,也在筹备着开发小程序。那么微信小程序怎样开发的呢,今天就教大家一个比较简单的开发方法。 微信小程序怎样开…

Linux进程通信之共享内存

一、共享内存之原理 1.是在物理内存中开辟了一片空间; 2.不同的进程通过页表将物理内存空间映射到自己的进程虚拟地址空间之中 3.不同的进程可以通过操作自己的虚拟地址空间中的虚拟地址去操作共享内存(物理地址) 共享内存是最快的进程之间…

为什么计算机中的负数要用补码表示?

本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问。 前言 大家好,我是小彭。 在前面的文章里,我们聊到了计算机的冯诺依曼架构的 3 个基本原则。其中第 1 个原则是计算机中所有信息都是采用二进制格式的编…

【在Spring MVC框架中,关于限制请求方式】

目录 1.关于限制请求方式 2. 附:关于GET和POST请求方式 1.关于限制请求方式 在Spring MVC框架中,RequestMapping注解的主要作用是配置请求路径,除此以外,还可以配置请求方式,例如: RequestMapping(value…

【Linux常见指令1】

目录:前言常用指令ls指令whoami && pwdcdtouch (触摸)mkdir (make directory)rmdir && rm (remove)mv(move 移动)cp(copy 拷贝)stat (统计)nanoechogccman(重要&…

如何在一台服务器同一个端口运行多个pgbouncer

PGbouncer是Postgresql数据库最常用的一款连接池软件,但是它是单进程的,所以只能占用一颗CPU资源,会造成CPU资源的浪费。PGbouncer有方法在同一台服务器的同一个端口运行多个进程实例,可以让资源得到充分利用。 先看下一个pgbounc…

【愚公系列】2022年12月 使用win11系统自带SSH,远程控制VMware中Liunx虚拟机系统

文章目录前言1.cpolar简介2.cpolar功能一、使用win11系统自带SSH,远程控制VMware中Liunx虚拟机系统1.注册cpolar账号2.下载最新版Ubuntu系统3.Ubuntu系统安装curl4.Ubuntu系统安装cpolar5.Ubuntu开启SSH6.WIN11测试SSH总结前言 身为开发人员,虚拟化系统…