趁着刚读完《认知天性》这书,书有一点这样说:「咱们学习行为更多凭着直觉,即便咱们已经看到了科学数据,但咱们也不肯意去相信本身的直觉存在问题。」那和咱们单元测试有什么关系呢?编程
这时我忽然有一个问题:「什么状况下你会进行单元测试?(除掉你心情好的时候)」函数
在彻底不清楚的状况下,个人第一反应天然是不知道,以及好奇为何要去单元测试?据说实践起来会产生优越感,会心动一下,那要不要学。单元测试
又有几个问题:你对你的代码很信任吗?你如何检测代码运行良好的呢?你还记得昨晚10点在作什么吗?你信任你的记忆力吗?学习
固然做为工程师的咱们,凭借一丝不苟的工做素养,天然在敲击键盘的那一刻都有一刹那以为写的真好。但时间一天又一天的过去了,忽然有一天产品要优化原有功能,那时候你还记得具体功能的实现细节吗?测试
若是你记性好,你或许记得,但如何验证你真的记得呢?优化
是我的源自心中强大的自信吗?仍是测试环境跑一跑,看看有没有问题呢?设计
应该都不是,而是要有一份数据告诉本身。这份数据应该是功能的测试数据集合。那如何获取这份数据呢?视频
还记得学生时代的你我吗?每一个学期都会有期中、期末测试,而这些测试就是验证本身这个阶段对学过知识的收获如何,最终成绩就是测试所得的数据。ip
综上所述,并不是时常理性的咱们,并不能准确的预估本身能力如何,尤为在咱们处理特殊状况下,评估水平和实际水平相差更大,因此咱们须要有「外部设备」帮助咱们去衡量水平。编写的代码也是同理,而这时的「外部设备」就是测试。而单元测试就是最简便的的测试手段。开发
不急入题,先看一个小例子。
假设你在一家电视组装厂上班,你的工做任务就是组装电视机,而后检测电视是否可以正常启动。忽然有一天,厂里接到紧急订单,须要下周一赶出来新型电视机。
这周一和往常同样,来到本身的车间,打开新型电视机的功能图纸,开始一步一步的组装功能电路板,好比供电板、音视频解码板、射频接收板等,而后再将这些电路板组装起来构成一个完整的电视机。
第一个新型电视机组装完成了,插上电源,竟然没法开机。你检查了一下电源没有问题,那是电视机出现了问题,这时你背脊一凉,叫来了主管述说状况和你的怀疑。负责人和你便到组装合机流水线,随机抽取了一台电视机进行测试发现现象如你通常,便叫停改流水线的组装工做。
你回到工位,当即把电视机拆了,依次对每个功能电路板进行测验其功能是否正确,结果你发现是供电板存在故障,拆解电路板对其电子元件进行测试,最终发现是某批次电容器故障,而后查看同批次电容元件,发现都存在此类问题。而后拿具体测试结果交给主管,主管联系提供商顺利解决了问题。化解了这次危机。
可是此类问题,如何能在后续生产中避免呢?你向主管提了建议,虽然我司采购元件都遵循国际标准,但防止此类问题出现,须要有人提早对同批次不一样元件进行测试,而后组装进行测试。主管欣然接受建议,而后笑着对你说,那这项任务就交给你了。
今后厂中就流传一个都市传说,每当工厂加工新型电视机的前一晚,在工厂中都回荡男性的哭泣声。
例子讲完了,回顾一下为何讲这个例子。细看是否是会发现仿佛和咱们的工做很相似,或许咱们排查问题的方式并不是像传统工业通常,但原理相同。若中途环境添加测试,确实会保障咱们后续代码质量以及在排查问题上应将目光偏向于何处。
不知道如今的你对于单元测试是什么?以及为何咱们要有单元测试?有一个感性的认识呢?
工程测试种类繁多,而根据涉及工程范围大小而言,单元测试是最小的维度。那这样说来,单元测试是否是较为简单且不须要花费太多精力就可以进行的呢?
其维基上具体定义以下:
是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工做。
而什么又是单元呢?
回想组装电视机的例子,例子中的单元是组成功能板的电子元件。而咱们工程项目中,最小的组成单元是什么呢?多是一个有一个函数或是一个有一个的组件吧。
一旦在单元定义上达成一致,那你就清楚的知道该测试什么不应测什么了吧。
组装电视机例子中,咱们进行测试的目的确保组装出来的电视机出现问题并不是是某个元件异常引起的问题。也就是隔离了元件组成了功能板,且确保了单个电子元件的正确性。
而用术语来说,单元测试的目的就是隔离了程序部件且证实单个单元部件的正确性。
根据组装电视机的例子,抽象总结单元测试的必要性:
如今咱们应该对单元测试是什么以及为何上应该有了较为理性的认识。那你接下来的编程过程当中会进行单元测试吗?
不会,对吧!好巧,我也不会。为何咱们不会呢?
PS:基础组装电视案例源自参考文献。