小编典典

如何在 Go 中测量测试覆盖率

all

有没有人成功地为 Go 单元测试生成代码覆盖率?我在网上找不到这样的工具。


阅读 91

收藏
2022-08-24

共1个答案

小编典典

请注意,Go 1.2(2013 年第四季度,rc1
可用)
现在将显示
测试覆盖率结果

一个主要的新特性go test它现在可以计算并在一个新的、单独安装的“go tool cover”程序的帮助下显示测试覆盖率结果

cover工具是子存储库的go.tools一部分。它可以通过运行安装

$ go get golang.org/x/tools/cmd/cover

封面工具做了两件事。

  • 首先,当“ go test”被赋予-cover标志时,它会自动运行以重写包的源代码并插入检测语句。然后像往常一样编译和运行测试,并报告基本的覆盖率统计信息:

$ go test -coverprofile fmtcoverage.html fmt ok fmt 0.060s 覆盖率:91.4% 的语句 $

  • 其次,对于更详细的报告,“go test”的不同标志可以创建一个覆盖率配置文件,go tool cover然后用“”调用封面程序可以分析该文件。

最新版本的 Go (2013/09/19) 使用:

go test -coverprofile <filename> <package name>

可以通过运行命令找到有关如何生成和分析覆盖率统计信息的详细信息

$ go help testflag
$ go tool cover -help

go test -coverprofile cover.out然后在您的默认浏览器中
go tool cover -html=cover.out打开cover.out

我什至不想等待浏览器打开,所以我定义了这个别名:

alias gc=grep -v -e " 1$" cover.out

我只需键入gc,并列出尚未涵盖的所有行 此处:coverage.out一行 以“ 1”结尾)。


2022 年更新,可能适用于 Go 1.19

提议:扩展 Go 的代码覆盖测试以包括应用程序

虽然go test将继续支持现有的基于 ” ” 的覆盖工作流,但建议将覆盖添加为 ” go build” 的新构建模式。

就像用户可以使用“”构建一个带有竞争检测器的可执行文件一样go build -race,也可以使用“”构建一个带有覆盖率的可执行文件go build -cover

将支持合并在不同 GOOS/GOARCH 环境中生成的覆盖配置文件。

2022-08-24