该-coverpkg
标志可用于指定用作覆盖分析基础的包。
引用命令 go:测试标志:
-coverpkg pattern1,pattern2,pattern3
Apply coverage analysis in each test to packages matching the patterns.
The default is for each test to analyze only the package being tested.
See 'go help packages' for a description of package patterns.
Sets -cover.
所以在你的具体例子中,这将做到:
go test -coverpkg=.,./foo -coverprofile=coverage.txt -covermode=atomic . ./foo
要将其应用于完整的模块/项目,您可以使用:
go test -coverpkg=./... -coverprofile=coverage.txt -covermode=atomic ./...
另一种选择是将“空”测试文件放入当前没有测试文件的包的文件夹中。这样它们将自然地包含在默认覆盖分析中,但显然它们不会覆盖任何内容。
见github上的相关讨论:
cmd/go: go test -cover & go test -coverprofile 应该始终输出覆盖率 #24570