Golang代码覆盖率报告中的混合热图/渐变颜色设置(covermode=set)
Golang代码覆盖率报告中的混合热图/渐变颜色设置(covermode=set) 团队您好,
我正在执行如下测试命令,需要获取位于不同文件夹(例如A)中的代码覆盖率,而测试则从另一个文件夹(例如B)执行。B文件夹中的代码实际调用了文件夹A中的API。以下是执行的命令列表:
go test -p 1 -cover -coverprofile=coverage.out -coverpkg 'some/path/to/pckgroot' ./folder1/file1_test.go ./folder1/file.go
go tool cover -html=coverage.out
gocovmerge ./coverage*.out > ./coveragefiles.merged
go tool cover -html=./coveragefiles.merged
目录结构:
rootFolder
|- folderA
|- file1.go
|- file2.go
|- folderB
|- file3.go // 此文件中的主方法调用了 file1.go 和 file2.go 中的 API
|- file3_test.go // 使用此文件调用 go test 以覆盖 folderA 中的代码
我得到的报告覆盖率看起来没问题,但是热图显示不正确。我使用了默认的 covermode 为 set,所以它应该显示代码是否被覆盖,即要么是绿色要么是红色。
但我得到的是渐变的绿色阴影,我不想要这样。
恳请帮助我理解我中间遗漏了什么,是使用的命令有误吗?请协助。
更多关于Golang代码覆盖率报告中的混合热图/渐变颜色设置(covermode=set)的实战教程也可以访问 https://www.itying.com/category-94-b0.html
团队好,
我还有一个与上述情况类似的疑问。目录结构相同。预期 folderA 包含被覆盖的代码,而 folderB 包含所有测试套件。
在使用 dep 时,我们的 go test 命令是:
go test -p 1 -cover -coverprofile=coverage.out -coverpkg 'projectRoot/vendor/www.github.com/x/y.git/src/rootFolder/folderA' ./folderB/file3_test.go ./folder1/file.go
这个命令之前运行良好。
迁移到 go mod 后,上述 go test 命令失败了,因为它找不到 vendor 目录,这很明显,因为迁移后没有创建 vendor 目录。我无法使用以下任何值获取代码覆盖率。结果始终是空白的。
现在,使用以下任何 coverpkg 组合都无法获得覆盖率:
-coverpkg='./...'
-coverpkg='./.../rootFolder/folderA'
-coverpkg='./rootFolder/folderA'
有人能帮忙获取被测试包的正确覆盖率吗?
更多关于Golang代码覆盖率报告中的混合热图/渐变颜色设置(covermode=set)的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
在 go test 命令中,-covermode 的默认值实际上是 set,它应该生成二进制的覆盖数据(覆盖=1,未覆盖=0)。然而,你观察到的渐变绿色阴影通常与 covermode=count 或 covermode=atomic 相关,它们会记录执行次数,导致覆盖率报告显示颜色渐变。
问题可能出在合并步骤。gocovmerge 工具在合并多个覆盖率文件时,如果原始数据是 set 模式,它可能会将覆盖状态转换为计数。例如,如果同一行代码在多个测试中被覆盖,gocovmerge 可能将其计为多次执行,从而产生渐变效果。
为了确保使用 set 模式并避免渐变,你可以尝试以下方法:
- 显式设置
-covermode=set:在go test命令中明确指定覆盖模式。 - 检查合并后的数据:
gocovmerge可能改变了覆盖模式。你可以直接使用单个覆盖率文件,或者确保合并工具保持set模式。
示例命令调整如下:
go test -p 1 -cover -covermode=set -coverprofile=coverage.out -coverpkg 'some/path/to/pckgroot' ./folderB/file3_test.go
go tool cover -html=coverage.out
如果仍有问题,请检查 coveragefiles.merged 文件的内容。使用 go tool cover -func=coveragefiles.merged 查看每行的覆盖计数。在 set 模式下,计数应为 0 或 1。如果看到大于 1 的值,则说明数据是 count 模式。
例如,运行:
go tool cover -func=coveragefiles.merged
输出中每行的百分比后的数字表示执行次数。在 set 模式下,这应该只有 0 或 1。
如果确认是合并步骤导致的问题,可以考虑使用其他合并策略,或者直接使用单个测试生成的覆盖率报告。

