我已经为Web API实现了多个软件包,每个软件包都有自己的测试用例。使用go test ./api/pkgname测试通过每个包装时通过。如果我想一次用go test ./api/...测试案例运行所有测试,则总是失败。
go test ./api/pkgname
go test ./api/...
在每个测试案例中,我使用来重新创建整个架构DROP SCHEMA public CASCADE,CREATE SCHEMA public并应用所有迁移。测试套件随机报告错误,说不存在关系/表,所以我猜每个测试套件(每个程序包)都以某种方式并行运行,从而弄乱了数据库状态。
DROP SCHEMA public CASCADE
CREATE SCHEMA public
我试图通过一些测试标志,例如go test -cpu 1 -parallel 0 ./src/api/...没有成功。
go test -cpu 1 -parallel 0 ./src/api/...
这里的问题可能是并行运行的测试吗?如果是的话,如何强制串行执行?
更新:
目前,我使用此替代方法来运行测试,但我仍然想知道是否有更好的解决方案
find <dir> -type d -exec go test {} \;
正如其他人指出的那样,-parallel不能完成任务(它仅在程序包中起作用)。但是,您可以使用标志-p = 1来依次进行软件包测试。在此处记录:
http://golang.org/src/cmd/go/testflag.go
但是(不是)不在命令行上,不能获得帮助等。我不确定它是否会坚持下去(尽管我认为如果删除了它,则-parallel应该是固定的。)