如何使用单条命令运行Go工作区中多模块的测试用例?
在Go工作区中运行多模块测试的方法
工作区代码结构
test$ ls -lR .: total 1824 drwxrwxr-x 3 user user 4096 Nov 8 10:55 cmd drwxrwxr-x 2 user user 4096 Nov 8 11:07 compute -rw-rw-r-- 1 user user 40 Nov 8 10:54 go.work -rwxrwxr-x 1 user user 1846984 Nov 8 11:04 main -rw-rw-r-- 1 user user 183 Nov 8 11:05 Makefile -rw-rw-r-- 1 user user 13 Nov 8 08:59 Readme.md ./cmd: total 4 drwxrwxr-x 2 user user 4096 Nov 8 10:49 user ./cmd/user: total 8 -rw-rw-r-- 1 user user 49 Nov 8 10:49 go.mod -rw-rw-r-- 1 user user 132 Nov 8 10:57 main.go ./compute: total 16 -rw-rw-r-- 1 user user 339 Nov 8 09:58 fib.go -rw-rw-r-- 1 user user 204 Nov 8 11:10 fib_test.go -rw-rw-r-- 1 user user 239 Nov 8 11:07 go.mod -rw-rw-r-- 1 user user 881 Nov 8 11:07 go.sum test$ test$ pwd /home/user/git/test test$ go version go version go1.20.2 linux/amd64
测试用例构建标签
所有测试文件都包含以下构建标签:
//go:build unit // +build unit
单个模块测试示例
运行./compute模块的测试时,需指定模块路径,示例如下:
test$ make test go test -v -race -tags=unit -cover ./compute === RUN TestZeroeth --- PASS: TestZeroeth (0.00s) PASS github.com/whatever/test/compute coverage: 100.0% of statements ok github.com/whatever/test/compute (cached) coverage: 100.0% of statements test$
问题
如何用单条命令运行工作区中所有模块的测试用例?在未使用Go工作区时,我们曾使用命令:test$ go test -tags=unit -cover ./...
解决方案
在Go工作区中,你可以直接沿用类似无工作区时的命令,在工作区根目录执行:
go test -tags=unit -cover ./...
Go工作区会自动识别go.work文件中包含的所有模块,./...通配符会遍历工作区内所有模块并执行测试。如果需要指定特定模块,也可以列出模块路径:
go test -tags=unit -cover ./cmd/user ./compute
只要go.work文件已正确包含所有需要测试的模块(从当前代码结构看,cmd/user和compute模块都已在工作区内),上述命令就能一次性运行所有符合构建标签的测试用例。
内容的提问来源于stack exchange,提问作者user1787812
相关产品推荐
相关产品推荐

