是否有人成功为Go单元测试生成代码覆盖率?我无法在网上找到适合的工具。
答案 0 :(得分:93)
请注意,Go 1.2 (Q4 2013, rc1 is available)现在会显示 test coverage results :
go test
的一个主要新功能是它现在可以计算,并且在新的,单独安装的“go tool cover
”程序的帮助下,显示测试覆盖率结果。来安装
cover
工具是go.tools
subrepository的一部分。它可以通过运行
$ go get golang.org/x/tools/cmd/cover
封面工具做两件事。
- 首先,当“
go test
”被赋予-cover
标志时,它会自动运行以重写包的源并插入检测语句。然后编译测试并照常运行,并报告基本的覆盖率统计信息:
$ go test -coverprofile fmt
ok fmt 0.060s coverage: 91.4% of statements
$
其次,对于更详细的报告,“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 -o cover.html
在浏览器中打开cover.html
我甚至不想等待浏览器打开,所以我定义了这个别名:
alias gc=grep -v -e " 1$" coverage.out
我只需输入gc
,并列出 尚未涵盖的所有行(此处:coverage.out
行不以“1
”结尾。
答案 1 :(得分:29)
Go带有用于测试和覆盖的强大工具。尽管所有Go工具都有详细记录go tool cover -help
,但我建议您阅读The cover story article on the official Go blog。它有很多例子,我强烈推荐它!
我的〜/ .bash_profile中有这个功能。 (您可以将其粘贴到终端中试一试)。
cover () {
t="/tmp/go-cover.$$.tmp"
go test -coverprofile=$t $@ && go tool cover -html=$t && unlink $t
}
然后只需cd
进入go项目/包文件夹并输入cover
。
这将在浏览器中打开一个可视化工具,向您显示当前包中每个文件的经过测试和未经测试的代码。非常有用的命令!我强烈建议您查找尚未经过100%测试的内容!显示的结果是每个文件。从左上角的下拉菜单中,您可以看到所有文件的结果。
使用此命令,您还可以检查任何包的覆盖范围,例如:
cover fmt
此命令的终端输出为:
ok fmt 0.031s coverage: 91.9% of statements
除了浏览器中的内容之外,您还会看到此工具以红色显示测试未涵盖的所有代码行:
也可以只保存html coverage文件,而不是在浏览器中打开它。当您的测试+覆盖率由Jenkins等CI工具运行时,这非常有用。这样,您就可以从中央服务器提供覆盖文件,整个团队将能够看到每个构建的覆盖率结果。
答案 2 :(得分:5)
$ 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
$
我没有用过它,这就是我所知道的。
答案 3 :(得分:4)
除了上面的好答案之外,我发现以下三行是获得它的最简单方法(包括所有软件包):
go test -v -coverprofile cover.out ./YOUR_CODE_FOLDER/...
go tool cover -html=cover.out -o cover.html
open cover.html
请注意,在HTML文件中,您会找到一个下拉按钮,可将您定向到所有文件。
答案 4 :(得分:4)
简单运行
go test -cover
或
go test -coverprofile=coverage.out ;
go tool cover -func=coverage.out
答案 5 :(得分:3)
如果您想直接在终端中按功能查看未覆盖的行,我为此重写了覆盖工具。可以在https://github.com/gregoryv/uncover上获得。
用法
go get -u github.com/gregoryv/uncover/...
go test -coverprofile /tmp/c.out
uncover /tmp/c.out
屏幕截图
答案 6 :(得分:2)
受到帮助菜单和此问题的其他答案的启发,只需运行:
f=cover.out; if [ -f $f ]; then rm $f; fi; go test ./... -coverprofile $f && \
go tool cover -html $f
答案 7 :(得分:1)
尝试使用 gaia-docker/base-go-build Docker Image。
这是一个Docker镜像,其中包含构建和测试coverage所需的全部内容。 在Docker容器中运行测试覆盖率会创建 .cover 文件夹,其中包含项目的测试覆盖率结果。
docker run --rm -v "$PWD":$PROJECT_PATH -w $PROJECT_PATH $BUILDER_IMAGE_NAME /go/script/coverage.sh
test coverage script在所有项目上运行&#39;文件夹和生成,在每个文件夹的 .cover 文件夹junit和coverage报告中,以及所有项目的联合报道覆盖率报告&#39;测试
Codecov还建议收集覆盖率结果的脚本:multiple files
答案 8 :(得分:1)
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
参考
GoTest Coverage Tool for go lang
替代方法
Go Native Test coverage
go test -coverprofile=coverage.out
go tool cover -html=coverage.out
答案 9 :(得分:1)
快速简便的方法是使用内置的附带工具:
$ go test -coverprofile cp.out //以百分比的方式发布覆盖率
执行上述命令后,如果您希望直观地看到代码覆盖率(如覆盖的陈述和遗漏等)
$ go工具封面-html = cp.out
注意:您需要在要查看覆盖范围的文件夹中执行上述命令
答案 10 :(得分:1)
覆盖率报告→
a)运行所有测试并启用覆盖率->进行测试。/ ... -coverprofile coverage.out
b)获取单个功能的覆盖范围以及整体覆盖范围→转到工具覆盖-func coverage.out
c)查看测试中涵盖的行和未涵盖的行→go tool cover -html = cover.out -o coverage.html 在浏览器中打开由此生成的coverage.html文件,并分析详细的coverage信息。
答案 11 :(得分:0)
如果您使用的是 VSCode ,则此功能受支持(但默认情况下已禁用)
只需打开保存+覆盖率报告的测试
https://github.com/microsoft/vscode-go/wiki/On-Save-features
它甚至会在您的编辑器中显示哪些行没有覆盖,这非常方便。
答案 12 :(得分:0)
如果您想在 Windows
中查找测试覆盖率,只需转到 command prompt
中所需的文件夹并键入以下命令:
go test -coverprofile=coverage.out && go tool cover -html=coverage.out
这非常简单并且工作可靠。