本篇文章主要讲解如何在 Docker 中进行 Go 单元测试,依赖 Docker 和 Go Modules。
为什么是 Docker
在 Docker 之前我们往往需要在 Jenkins 服务器上配置不同的 Go 版本以及针对每个项目配置 GOPATH,项目之间的隔离性差,经常出现基础库版本冲突的问题。
有了 Docker,我们可以在不同容器中运行单元测试,该测试不局限不同项目,甚至可以是同一项目不同分支。
所以在测试隔离性和项目测试并发度上都有很大提升,而且测试结束后,环境清理也简单许多。
为什么是 Go Modules
Go Modules 作为官方默认的包管理工具,基本解决了 Go 长期存在的包管理问题,它为我们的项目管理带来很多好处:
- 自动解析和添加依赖
- 签名验证
- 依赖缓存
- 支持相对路径依赖
- 支持依赖一键打包,方便在离线环境下运行程序
实际例子
下面我们来看一个简单例子,来自 Gin Testing Example,项目目录结构为:
$ tree .
.
├── go.mod
├── go.sum
├── main.go
└── main_test.go0 directories, 4 files
main.go 内容:
package mainfunc setupRouter() *gin.Engine {r := gin.Default()r.GET("/ping", func(c *gin.Context)