如何顺序跨多个 Go 包执行测试
使用 go test ./... 对多个包执行测试时,这一点很重要考虑并行化方面。默认情况下,测试是跨包同时运行的。但是,某些场景(例如基于数据库的测试)需要顺序执行。
在提供的示例中,由于并行测试执行而出现数据库争用。每个测试文件都定义了全局数据库变量,这在测试同时运行时可能会导致冲突。
解决方案:
要强制跨包顺序执行,请使用未记录的 -p 标志以及 go test 如下:
go test -p 1 ./...
-p 1 标志串行构建和测试所有包,解决争用问题。
替代解决方案(使用 Shell 脚本) :
如果使用 -p 1 标志不可行,可以采用基于 shell 脚本的替代方法。这是一个 Bash 脚本示例:
find . -name '*.go' -printf '%h\n' | sort -u | xargs -n1 -P1 go test
此脚本列出包含 .go 文件的所有子目录,删除重复项,并按顺序在每个子目录上运行 go test。
以上是如何跨多个包顺序执行Go测试?的详细内容。更多信息请关注PHP中文网其他相关文章!