Answers:
请注意,Go 1.2(2013年第四季度,可用rc1)现在将显示测试覆盖率结果:
的一项主要新功能
go test
是,它现在可以计算并在单独安装的新程序的帮助下go tool cover
显示测试覆盖率结果。该
cover
工具是一部分go.tools
subrepository。可以通过运行安装
$ go get golang.org/x/tools/cmd/cover
封面工具有两件事。
- 首先,
go test
给“ ”-cover
标志时,它将自动运行以重写包的源并插入检测语句。然后将测试编译并照常运行,并报告基本覆盖率统计信息:
$ go test -coverprofile fmtcoverage.html fmt
ok fmt 0.060s coverage: 91.4% of statements
$
其次,对于更详细的报告,要“进行测试”的不同标志可以创建一个覆盖率配置文件,
go tool cover
然后用“ ” 调用的覆盖程序可以对其进行分析。
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
“)。
go test -coverprofile cover.out
然后在浏览器中go tool cover -html=cover.out -o cover.html
打开cover.html
go tool cover -html=cover.out
将自动打开浏览器,但不适用于我的系统。我更喜欢保持浏览器打开并在必要时刷新页面。
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
进入go project / package文件夹并输入cover
。这将在浏览器中打开一个可视工具,向您显示当前包中每个文件的经过测试和未经测试的代码。非常有用的命令!我强烈建议您查找尚未经过100%测试的内容!显示的结果是每个文件的。从左上角的下拉列表中,您可以查看所有文件的结果。
使用此命令,您还可以检查任何包装的覆盖范围,例如:
cover fmt
该命令在终端中的输出为:
ok fmt 0.031s coverage: 91.9% of statements
除了浏览器之外,您还将看到此工具以红色显示测试未涵盖的所有代码行:
也可以只保存html coverage文件,而不用在浏览器中打开它。如果您的测试+覆盖范围是由诸如詹金斯(Jenkins)这样的CI工具运行的,这将非常有用。这样,您可以从中央服务器提供Coverage文件,整个团队将能够看到每个构建的Coverage结果。
除了上面的好答案之外,我发现以下三行是获得它的最简单方法(包括所有软件包):
go test -v -coverprofile cover.out ./YOUR_CODE_FOLDER/...
go tool cover -html=cover.out -o cover.html
open cover.html
请注意,在HTML文件中,您会找到一个下拉按钮,可将您定向到所有文件。
$ go tool
6a
6c
6g
6l
addr2line
api
cgo
cov
dist
ebnflint
fix
gotype
nm
objdump
pack
pprof
prof
vet
yacc
$ go tool cov -h
usage: cov [-lsv] [-g substring] [-m minlines] [6.out args...]
-g specifies pattern of interesting functions or files
go tool cov: exit status 1
$
我没有用过,这就是我所知道的。
~/go/pkg/tool/linux_amd64
与昨天的上次Go版本匹配。
如果您想直接在终端中按功能查看未发现的行,我为此重写了覆盖工具。可在https://github.com/gregoryv/uncover上获得。
用法
go get -u github.com/gregoryv/uncover/...
go test -coverprofile /tmp/c.out
uncover /tmp/c.out
屏幕截图
如果您使用的是VSCode,则此功能不受支持(但默认情况下已禁用)
只需打开保存+覆盖率报告的测试
https://github.com/microsoft/vscode-go/wiki/On-Save-features
它甚至会在您的编辑器中显示哪些行没有覆盖,这非常方便。
一种快速简便的方法是使用内置go附带的coverage工具:
$ go test -coverprofile cp.out //以一个班轮百分比明智地覆盖
执行上述命令后,如果希望直观地查看代码覆盖范围(如覆盖的语句和遗漏等)
$ go工具封面-html = cp.out
注意:您需要在想要查看覆盖率的文件夹中执行上述命令
尝试使用gaia-docker / base-go-build Docker Image。
这是一个Docker映像,其中包含构建和测试覆盖率所需的全部内容。在Docker容器中运行测试覆盖率会创建一个.cover文件夹,其中包含项目的测试覆盖率结果。
docker run --rm -v "$PWD":$PROJECT_PATH -w $PROJECT_PATH $BUILDER_IMAGE_NAME /go/script/coverage.sh
该测试覆盖脚本在所有项目上运行的文件夹,并生成,内部设备罩起来文件夹,每个文件夹JUnit和覆盖报告,以及将所有项目的覆盖报告的测试。
Codecov还建议使用一个脚本来收集覆盖率结果:多个文件
Golang的测试范围
go get github.com/axw/gocov/gocov
go get -u gopkg.in/matm/v1/gocov-html
检查它是否正确安装,并且您可以从终端访问
运行测试用例
如果运行测试用例,它将基于该文件重做.json文件,您将获得.html文件中的代码覆盖率报告
gocov test >your_Coverage_report.json
测试用例完成后,使用.json在.html文件中生成报告
gocov-html your_Coverage_report.json >your_Coverage_report.html
参考
替代方法
进行原生测试
go test -coverprofile=coverage.out
go tool cover -html=coverage.out
go test -coverprofile <filename> <package name>