如何检测GO中分隔文件夹的代码覆盖率?

joh*_*nay 8 code-coverage go

我的项目结构
stuff/stuff.go -> package: stuff
test/stuff/stuff_test.go -> package: test
虽然stuff_test执行来自stuff.go的代码但它显示
coverage: 0.0% of statements

我使用 go test -cover
如果我将我的*_test.go移动到程序的stuff-folder它工作正常.
或许我的项目结构方法没有很好地设计/符合要求?

peq*_*peq 6

您可以使用该-coverpkg选项来选择要记录其覆盖范围信息的包。

从输出go help testflag:

-coverpkg pattern1,pattern2,pattern3
将每个测试中的覆盖率分析应用于与模式匹配的包。默认情况下,每个测试仅分析正在测试的包。有关包模式的描述,请参阅“转到帮助包”。套装-封面。

例如:

go test ./test/... -coverprofile=cover.out -coverpkg ./...
Run Code Online (Sandbox Code Playgroud)

然后查看报告:

go tool cover -html=cover.out
Run Code Online (Sandbox Code Playgroud)


saa*_*rrr 5

传统的 Go 程序结构将测试与包保持在一起。像这样:

project
|-stuff
|--stuff.go
|--stuff_test.go
Run Code Online (Sandbox Code Playgroud)

在您的测试文件的顶部,您仍然声明package stuff,并且TestMethodX如果您想go test自动运行它们,则需要您的测试方法采用这种形式。

有关详细信息,请参阅 Go 文档:https : //golang.org/pkg/testing/


Rob*_*ier 5

不直接支持跨包测试覆盖率,但有几个人构建了包装器来合并各个覆盖率配置文件。

有关此问题的悠久历史,请参阅问题#6909 。有关进行合并的示例工具,请参阅gotestcover 。还有gocovmerge。我构建了自己的版本,所以我没有尝试过其中任何一个,但我确信它们都像我的一样工作,而且我的工作得很好。

我的感觉是,这只是一个没有人编写真正引人注目的变更列表的问题,并且对于核心维护者来说并不是那么重要,因此它还没有得到解决。它确实提出了可能破坏现有测试的小极端情况,因此对我们大多数人有效的快速技巧尚未被按原样接受。但我还没有看到任何表明核心维护者积极反对此功能的讨论。