我为Web API实现了几个包,每个包都有自己的测试用例.当使用go test ./api/pkgname测试每个包时,测试通过.如果我想一次运行go test ./api/...个测试用例的所有测试,那么测试用例总是失败的.

在每个测试用例中,我使用DROP SCHEMA public CASCADE后跟CREATE SCHEMA public重新创建整个模式,并应用所有migrations.测试套件随机报告错误,说关系/表不存在,所以我猜每个测试套件(每个包)都以某种方式并行运行,从而扰乱了DB状态.

我试着传递一些测试标志,比如go test -cpu 1 -parallel 0 ./src/api/...,但没有成功.

这里的问题是并行运行的测试吗?如果是,我如何强制串行执行?

Update:

目前我使用这个变通方法来运行测试,但是我仍然想知道是否有更好的解决方案

find <dir> -type d -exec go test {} \;

推荐答案

正如其他人所指出的那样,-parallel不能完成这项工作(它只在包中有效).但是,您可以使用标志-p=1来连续运行包测试.此处记录了这一点:

http://golang.org/src/cmd/go/testflag.go

但是(afaict)不在命令行、go help等中.我不确定它是否要保留(尽管我认为如果它被删除,应该修复-parallel)

Go相关问答推荐

Go -SDP服务器读缓冲区不会更改任何内容

使用Gorm创建自定义连接表

向API网关终结点发出POST请求时出现AWS Lambda With Go:";Rune me.InvalidEntrypoint";错误

为什么工具链指令在这种情况下没有效果?

为什么我不能使用Docker从本地访问我的Gin应用程序?

错误&对象已被Golang在K8s操作符上修改

如何用Golang解码这个嵌套的json?

如何配置vscode以在Go中显示不必要的(过度指定的)泛型?

如何在Golang中覆盖404

Python样式生成器实现为通道:过早读取

文件路径.Abs()未在结果中提供子目录

调用库和直接操作效率有区别吗?

通过多阶段构建复制到 Docker 容器中时找不到文件

git ls-remote 成功而 go get 失败

我突然无法再将我的 GoLang 应用程序部署到 Google AppEngine

Go 中如何调用测试函数?

Golang grpc go.mod 问题

有没有办法判断值是否满足接口中定义的类型约束?

GRPC 反向代理混淆 GRPC 和 GRPC-Web

防止在 Go 公用文件夹中列出目录