基于 docker-compose 实现跨平台跨语言环境的容器依赖管理方案,以解决运行 unittest 场景下的 (mysql, redis, mc)容器依赖问题;
• 本地安装Docker
• 无侵入式的环境初始化
• 快速重置环境
• 随时随地运行(不依赖外部服务)
• 语义式API声明资源
• 真实外部依赖,而非in-process模拟
注意事项
- 正确的对容器内服务进行健康检测,避 免unittest启动时候资源还未ready;
- 应该交由app自己来初始化数据,比如db的scheme,初始的sql数据等,为了满足测试的一致性,在每次结束后,都会销毁容器;
- 在单元测试开始前,导入封装好的
- testing库,方便启动和销毁容器;对于service的单元测试,使用gomock等库把dao mock掉,所以在设计包的时候,应该面向抽象编程;
- 在本地执行依赖Docker,在CI环境里执行Unittest
https://pkg.go.dev/github.com/bilibili/kratos/pkg/testing/lich
通过单元测试发现协程泄露
单个方法测试
TestMain集成
第三方库推荐
- 断言库:testify https://github.com/stretchr/testify
- 接口mock框架:gomock https://github.com/golang/mock
- go-sqlmock: https://github.com/DATA-DOG/go-sqlmock
- httpmock: https://github.com/jarcoal/httpmock
- gripmock: https://github.com/tokopedia/gripmock
- redismock:https://github.com/elliotchance/redismock