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

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

One major new feature of go test is that it can now compute and, with help from a new, separately installed"go tool cover" program, display test coverage results.

The cover tool is part of the go.tools subrepository. It can be installed by running

The cover tool does two things.

  • First, when"go test" is given the -cover flag, it is run automatically to rewrite the source for the package and insert instrumentation statements. The test is then compiled and run as usual, and basic coverage statistics are reported:

Second, for more detailed reports, different flags to"go test" can create a coverage profile file, which the cover program, invoked with"go tool cover", can then analyze.

弗兰克·希勒(Frank Shearar)提到:

The latest versions of Go (2013/09/19) use:

Details on how to generate and analyze coverage statistics can be found by running the commands

伊万·布莱克(Ivan Black)在评论中提到:

go test -coverprofile cover.out and then
go tool cover -html=cover.out -o cover.html opens cover.html in browser

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

我只键入gc,并列出了所有尚未覆盖的行的列表(此处:coverage.out行不以" 1"结尾的行)。

Go随附了很棒的工具来进行测试和覆盖。尽管所有Go工具的文档都有很好的记录,但我还是建议您阅读Go官方博客上的封面故事文章。它有很多例子,我强烈推荐它!

我的?/ .bash_profile中有此功能。 (您可以将其粘贴到终端中进行尝试)。

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

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

cover fmt

该命令在终端中的输出为:

除了浏览器之外,您还将看到此工具以红色显示测试未涵盖的所有代码行:

enter image description here

也可以只保存html coverage文件,而不用在浏览器中打开它。如果您的测试+覆盖范围是由诸如詹金斯(Jenkins)这样的CI工具运行的,这将非常有用。这样,您可以从中央服务器提供Coverage文件,整个团队将能够看到每个构建的Coverage结果。

就在这里,一些文档在这里。

我没有用过,这就是我所知道的。

除了上面的好答案之外,我发现以下三行是获得它的最简单方法(包括所有软件包):

请注意,在HTML文件中,您会找到一个下拉按钮,可将您定向到所有文件。

如果您希望直接在终端中按功能查看未发现的行,我为此重写了覆盖工具。可在https://github.com/gregoryv/uncover上找到。

用法

屏幕截图

enter image description here

覆盖率报告→

a)运行所有测试并启用coverage-> go test。/ ... -coverprofile coverage.out

b)获取单个功能的覆盖范围以及整体覆盖范围→转至工具覆盖范围-func coverage.out

c)查看测试中涵盖的行和未涵盖的行→转到tool cover -html = cover.out -o coverage.html
打开在浏览器中生成的coverage.html文件,并分析详细的coverage信息。

受此问题的帮助菜单和其他答案的启发,只需运行:

如果您使用的是VSCode,则此功能不受支持(但默认情况下已禁用)

只需打开保存+覆盖率报告的测试

https://github.com/microsoft/vscode-go/wiki/On-Save-features

它甚至会在您的编辑器中显示哪些行没有覆盖,这非常方便。

一种快速简便的方法是使用内置go附带的coverage工具:

$ go test -coverprofile cp.out
// Emits the coverage in one liner percentage wise

执行上述命令后,如果您希望直观地查看代码覆盖率(如覆盖的语句和遗漏等)

$ go tool cover -html=cp.out

注意:您需要在想要查看覆盖率的文件夹中执行上述命令

Test Coverage for Golang


go get github.com/axw/gocov/gocov
go get -u gopkg.in/matm/v1/gocov-html

检查它是否正确安装,并且您可以从终端访问

Run the Test Case

如果运行测试用例,它将基于该文件重做.json文件,您将获得.html文件中的代码覆盖率报告

gocov test >your_Coverage_report.json

测试用例完成后,使用.json在.html文件中生成报告

gocov-html your_Coverage_report.json >your_Coverage_report.html

参考

GoTest覆盖语言工具

去测试报告工具

Alternate Method

进行原生测试

尝试使用gaia-docker / base-go-build Docker Image。

这是一个Docker映像,其中包含构建和测试覆盖率所需的全部内容。
在Docker容器中运行测试覆盖率会创建.cover文件夹,其中包含项目的测试覆盖率结果。

测试覆盖率脚本在所有项目的文件夹上运行,并在.cover文件夹junit和每个文件夹的覆盖率报告内生成,以及所有项目测试的合并覆盖率报告。

Codecov还建议使用一个脚本来收集覆盖率结果:多个文件