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

新手上路,请多包涵

有没有人成功生成 Go 单元测试的代码覆盖率?我无法在网络上找到适用于此的工具。

原文由 Georgi Atsev 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

请注意, Go 1.2(2013 年第 4 季度,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 tool cover ”调用,然后可以分析该文件。

Frank Shearar 提到

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

 go test -coverprofile <filename> <package name>

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

$ go help testflag
$ go tool cover -help


Ivan Black 在评论 中提到:

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 环境中生成的覆盖剖面。

原文由 VonC 发布,翻译遵循 CC BY-SA 4.0 许可协议

Go 带有很棒的测试和覆盖工具。尽管所有 Go 工具都有很好的文档记录 go tool cover -help 我建议阅读 官方 Go 博客上的封面故事文章。它有很多例子,我强烈推荐它!

我的 ~/.bash_profile 中有这个功能。 (您可以将其粘贴到终端中试一试)。

 cover () {
    t="/tmp/go-cover.$$.tmp"
    go test -coverprofile=$t $@ && go tool cover -html=$t && unlink $t
}

然后只需 cd 进入项目/包文件夹并输入 cover 。这将在浏览器中打开一个可视化工具,向您显示当前包中每个文件的已测试和未测试代码。非常有用的命令!我强烈推荐它用于查找尚未 100% 测试的内容!显示的结果是每个文件。从左上角的下拉列表中,您可以看到所有文件的结果。

使用此命令,您还可以检查任何包的覆盖范围,例如:

cover fmt

此命令在终端中的输出将是:

 ok      fmt 0.031s  coverage: 91.9% of statements

除了在您的浏览器中,您还会看到此工具以红色显示所有未包含在测试中的代码行:

在此处输入图像描述

也可以只保存 html 覆盖文件而不是在浏览器中打开它。当您的测试+覆盖率由 Jenkins 等 CI 工具运行时,这非常有用。这样你就可以从中央服务器提供覆盖率文件,整个团队将能够看到每个构建的覆盖率结果。

原文由 Pavel Nikolov 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题