Golang 1.12 Docker环境下部分测试未执行无失败日志问题咨询
排查方向
以下是导致该现象的常见原因,可逐一核对:
- 测试文件命名不符合规范
Go仅识别文件名以_test.go结尾的文件作为测试文件,若测试代码所在文件不符合该命名规则,go test会直接忽略该文件,不会执行其中的测试函数。 - 测试函数未被正确识别
测试函数必须满足:函数名以大写Test开头,仅接收*testing.T类型的单个参数。需确认测试函数是否存在拼写错误、函数名首字母小写等问题。 - 测试包未被命令匹配到
执行go test -v ./...时,命令会递归匹配当前工作目录下的所有Go包,需确认:- 容器内的工作目录为项目根目录,测试所在的
github.com/eventials/csw-notifications/services包处于当前工作目录的子路径下 - 测试文件头部没有添加
//go:build ignore或// +build ignore这类忽略编译标签,带该标签的文件会被go test直接跳过
- 容器内的工作目录为项目根目录,测试所在的
- 容器内代码未同步更新
若启动Docker容器时未挂载本地最新代码,或镜像构建时打包的是旧版本代码,容器内运行的代码不包含新增的失败测试用例,自然不会输出失败日志。 - Go模块配置异常(适配Go1.12版本)
Go1.12对Go Modules的支持尚未完全稳定,若项目使用go mod管理依赖,需确认容器内GO111MODULE环境变量配置正确,且go.mod文件中的模块路径与实际项目路径匹配,否则go test可能无法正确识别子包中的测试文件。
验证方法
可在测试函数首行添加t.Log("测试函数已触发")代码,单独执行对应包的测试命令go test -v ./services,若输出中没有该条日志,即可确认测试函数未被识别运行。
内容的提问来源于stack exchange,提问作者Breno Alves
相关产品推荐
相关产品推荐

