基于 docker-compose 实现跨平台跨语言环境的容器依赖管理方案,以解决运行 unittest 场景下的 (mysql, redis, mc)容器依赖问题;
• 本地安装Docker
• 无侵入式的环境初始化
• 快速重置环境
• 随时随地运行(不依赖外部服务)
• 语义式API声明资源
• 真实外部依赖,而非in-process模拟

注意事项

  • 正确的对容器内服务进行健康检测,避 免unittest启动时候资源还未ready;
  • 应该交由app自己来初始化数据,比如db的scheme,初始的sql数据等,为了满足测试的一致性,在每次结束后,都会销毁容器;

image.png

  • 在单元测试开始前,导入封装好的
  • testing库,方便启动和销毁容器;对于service的单元测试,使用gomock等库把dao mock掉,所以在设计包的时候,应该面向抽象编程;
  • 在本地执行依赖Docker,在CI环境里执行Unittest

https://pkg.go.dev/github.com/bilibili/kratos/pkg/testing/lich

image.png

通过单元测试发现协程泄露

单个方法测试

TestMain集成

参看: https://mp.weixin.qq.com/s/3iPqxiK2mf9Fl5CSZ9U7RQ

第三方库推荐

Reference