关于单元测试,我们需要知道什么?- 引言篇

栏目: 编程工具 · 发布时间: 6年前

内容简介:趁着刚读完《认知天性》这书,书有一点这样说:「我们学习行为更多凭着直觉,即使我们已经看到了科学数据,但我们也不愿意去相信自己的直觉存在问题。」那和我们单元测试有什么关系呢?这时我突然有一个问题:「什么情况下你会进行单元测试?(除掉你心情好的时候)」在完全不清楚的情况下,我的第一反应自然是不知道,以及好奇为什么要去单元测试?听说实践起来会产生优越感,会心动一下,那要不要学。

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

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

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

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

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

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

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

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

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

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

单元测试

小例子

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

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

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

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

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

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

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

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

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

什么是单元测试?

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

其维基上具体定义如下:

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

而什么又是单元呢?

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

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

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

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

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

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

  1. 在开发周期早期快速发现程序问题
  2. 可以让程序的底层单元更加可靠
  3. 出现问题,分析问题期间,清楚知道该关注哪些,不用关注哪些
  4. 后期程序重构,可以根据单元测验校验模块是否正确
  5. 单元测试是一种文档的集成

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

不会,对吧!好巧,我也不会。为什么我们不会呢?

PS:基础组装电视案例源自参考文献。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Tangled Web

The Tangled Web

Michal Zalewski / No Starch Press / 2011-11-26 / USD 49.95

"Thorough and comprehensive coverage from one of the foremost experts in browser security." -Tavis Ormandy, Google Inc. Modern web applications are built on a tangle of technologies that have been de......一起来看看 《The Tangled Web》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具