单元测试是什么?
在计算机编程中,单元测试(英语:Unit Testing)又称为模块测试, 是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。 程序单元是应用的最小可测试部件。
这里的模块,不是 go 里面的包,程序的最小单元应该是某个具体的函数,甚至是某个里面没有任何项目内函数调用的函数。
注意不要把单元测试写成集成测试。单元测试的范围仅仅在这个独立单元中,不依赖其他单元。而集成测试的目的是验证整个系统在真实环境下的功能行为,即将不同模块组合在一起进行测试。集成测试通常需要将项目启动起来,并且可能会依赖外部资源,例如数据库,网络,文件等。
单元测试应该被持续集成系统自动运行,报错了需要优先修复。
单元测试由最熟悉代码的人编写,就是开发者,不是测试者。
需要改造代码,让代码适合单元测试,函数所需的数据都在参数中指定,不要使用全局变量。纯函数是最好做单元测试的,比如 abs, sqrt 这些。
使用依赖注入,控制反转。
每个单元测试消耗的时间要短,最多几秒。
要把单元测试的代码和其他实现功能的代码同等对待,要注意简洁、可读、低重复。
对于外部系统,如 rpc, api 等使用 mock。
少量的磁盘读写可以不用 mock。
数据库为了节省时间使用内存数据库。
好处
- 减少手工测试时间。
- 测试都过了,能让人安心。
- 利于重构,让人更清楚知道改动后影响的逻辑。
- 降低耦合,依赖多、过于复杂的函数是不方便单元测试的,为了单元测试就得拆成一小块一小块的。