如何写一个好的单元测试

120 阅读1分钟

单元测试的目的

单元测试的目的是证明一个函数的逻辑是正确的

单元测试的原则

  • 快速: 应花非常少的时间来运行单元测试
  • 独立: 单元测试是独立的,可以单独运行
  • 可重复: 运行单元测试的结果应保持一致,如果在运行期间不改变任何内容,总是能得到相同的结果
  • 自检查: 测试应该在没有任何人工交互的情况下,自动检测测试是否通过

和集成测试区别

为什么写单元测试

提前发现问题,缩短反馈周期,降低了修复缺陷花的时间

  • 驱动设计: 明确代码功能模块职责,帮助系统的设计灵活、松耦合
  • 活文档: 可执行且永远为最新的说明文档(当后续测试或生产出现问题时,需要将产生错误的数据添加到单元测试用例,所以为最新)
  • 安全重构: 后续展开重构时,更安全可靠
  • 易于调试: 帮助开发者快速定位bug
  • 提升信心: 开发者能够在开发的过程中快速得到反馈

如何编写单元测试

Golang常用单元测试框架

  • sqlmock: 模拟sql.DB,指定执行的sql和返回结果,常用于dao层方法测试
  • gomock: 模拟自己指定的接口中的方法,指定参数和返回值,常用于模拟rpc接口
  • gomonkey: 作用同gomock,但不依赖接口,运行时函数替换,线程不安全