单元测试的目的
单元测试的目的是证明一个函数的逻辑是正确的
单元测试的原则
- 快速: 应花非常少的时间来运行单元测试
- 独立: 单元测试是独立的,可以单独运行
- 可重复: 运行单元测试的结果应保持一致,如果在运行期间不改变任何内容,总是能得到相同的结果
- 自检查: 测试应该在没有任何人工交互的情况下,自动检测测试是否通过
和集成测试区别
为什么写单元测试
提前发现问题,缩短反馈周期,降低了修复缺陷花的时间
- 驱动设计: 明确代码功能模块职责,帮助系统的设计灵活、松耦合
- 活文档: 可执行且永远为最新的说明文档(当后续测试或生产出现问题时,需要将产生错误的数据添加到单元测试用例,所以为最新)
- 安全重构: 后续展开重构时,更安全可靠
- 易于调试: 帮助开发者快速定位bug
- 提升信心: 开发者能够在开发的过程中快速得到反馈
如何编写单元测试
Golang常用单元测试框架
- sqlmock: 模拟sql.DB,指定执行的sql和返回结果,常用于dao层方法测试
- gomock: 模拟自己指定的接口中的方法,指定参数和返回值,常用于模拟rpc接口
- gomonkey: 作用同gomock,但不依赖接口,运行时函数替换,线程不安全