单元测试是什么
单元测试,是对程序中的最小单元进行测试,一般是函数(或者对象的方法)。通过比较函数的返回值(有时候会捕获异常)和期望值,来断定测试是否通过。
有必要吗
结论是有。
单元测试有如下效果:
1. 提高可信度
如果你经常混github,你应该能够发现,很多开源的项目是具备详尽的单元测试的。 为什么呢? 单元测试可以说是工程师对项目功能的承诺,别人查看测试代码,就能了解对应的函数的大概使用方法,什么样的输入会有什么输出,什么时候会报异常,都是有迹可循,看着很放心。如果你看到一个项目,没有测试,即使readme写的天花乱坠,你敢用到公司的项目中么?
2. 避免低级错误
如果一个项目有单元测试,当你添加了一个新功能,或者修改了一个bug时,你只需要简单的跑一下测试就可以基本确定你的修改并没有引起大面积的,灾难性的事故。说个很简单的例子,我开发了一个npm 命令行程序,在一起版本升级的时候修改了一个很小的函数,由于太小了所以也没有做一些验证测试。结果这个版本出了大问题。如果有人刚好下载了这个版本,那他肯定会骂死我。如果我当时有单元测试,这种失误绝对是可以避免的。
3. 测试效率高
有的人可能会说,将项目启动起来再人工验证,效果也不差。我们知道,人有惰性,人会犯错。但是经过细心编写的单元测试脚本却可以运行千万次而保证始终如一。而且,相对于人工验证的低效率,单元测试可以最大限度解放生产力。
为什么有的项目没有单元测试呢
尽管都说单元测试好,但是还是有很多项目并没有单元测试。
我遇到的大概有这么三种原因:
1. 技术领导不懂单元测试
别看很多领导自称带过的项目都实现了测试驱动开发,但是有很大一部分人都完全不懂单元测试是什么,应该测什么,怎么测? 覆盖率是什么? 有几种维度?等等。测试对他们来说,只是对客户,或者对上面领导的一种敷衍。有或者没有,其实并没有什么区别。
2. 项目太紧张
有的时候,项目周期特别紧。曾经参加过的一个项目,后台接口,前端模板还没准备好,大领导就要看类似设计文档中画出来的页面。我们真是无语凝噎。只得没日没夜的催美工,催后台,只为博领导一笑。这个时候,谁还管单元测试。
3. 团队素质太差
一个团队,如果都不懂单元测试,也不愿意主动学习,那根本就无法实施单元测试。就像我所在的项目组。不过还好有我。
吐槽一下:真的很累。