是否有人成功地为 Go 单元测试生成了代码覆盖率?我在网上找不到这方面的工具。
就是 给你有些医生是 给你。
$ 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 1.2(Q42013,rc1可用)现在将显示 测试覆盖率结果:
go test的一个主要新特性是 它现在可以计算和帮助下,从一个新的,单独安装的“ go tool cover”程序,显示测试覆盖率的结果。 cover工具是 go.tools子库的一部分。它可以通过运行 $ go get golang.org/x/tools/cmd/cover 盖工具有两个作用。 首先,当“ go test”被赋予 -cover标志时,它会自动运行以重写包的源代码并插入检测语句。然后像往常一样编译和运行测试,并报告基本覆盖率统计数据: $go test-cover profile fmtCoverage.html fmt Ok fmt 0.060 s 覆盖率: 91.4% 的报表 $ 其次,对于更详细的报告,“去测试”的不同标志可以创建一个覆盖概要文件,然后用“ go tool cover”调用的覆盖程序可以对其进行分析。
go test的一个主要新特性是 它现在可以计算和帮助下,从一个新的,单独安装的“ go tool cover”程序,显示测试覆盖率的结果。
go test
go tool cover
cover工具是 go.tools子库的一部分。它可以通过运行
cover
go.tools
$ go get golang.org/x/tools/cmd/cover
盖工具有两个作用。
首先,当“ go test”被赋予 -cover标志时,它会自动运行以重写包的源代码并插入检测语句。然后像往常一样编译和运行测试,并报告基本覆盖率统计数据:
-cover
$go test-cover profile fmtCoverage.html fmt Ok fmt 0.060 s 覆盖率: 91.4% 的报表 $
其次,对于更详细的报告,“去测试”的不同标志可以创建一个覆盖概要文件,然后用“ go tool cover”调用的覆盖程序可以对其进行分析。
弗兰克 · 希拉尔(Frank Shearar):
最新版本的 Go (2013/09/19)使用: go test -coverprofile <filename> <package name> 有关如何生成和分析覆盖率统计信息的详细信息可以通过运行这些命令找到 $ go help testflag $ go tool cover -help
最新版本的 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,并且有一个包含所有 没有行的列表(在这里: 以“ 1”结尾的 coverage.out行 没有)。
然后是 go test -coverprofile cover.out go tool cover -html=cover.out在默认浏览器中打开 cover.out
go test -coverprofile cover.out
go tool cover -html=cover.out
cover.out
我甚至不想等到浏览器打开,所以我定义了这个别名:
alias gc=grep -v -e " 1$" cover.out
我只需键入 gc,并且有一个包含所有 没有行的列表(在这里: 以“ 1”结尾的 coverage.out行 没有)。
gc
1
coverage.out
更新2022,可能是 Go 1.19
建议: 扩展 Go 的代码覆盖测试以包括应用程序
虽然现有的“ go test”为基础的覆盖工作流程将继续得到支持,建议是增加覆盖作为一个新的构建模式的“ go build”。 用户可以使用“ go build -race”构建一个种族检测器插装的可执行文件,同样,也可以使用“ go build -cover”构建一个覆盖率插装的可执行文件。 将支持合并在不同 GOOS/GOARCH 环境中产生的覆盖率配置文件。
虽然现有的“ go test”为基础的覆盖工作流程将继续得到支持,建议是增加覆盖作为一个新的构建模式的“ go build”。
go build
用户可以使用“ go build -race”构建一个种族检测器插装的可执行文件,同样,也可以使用“ go build -cover”构建一个覆盖率插装的可执行文件。
go build -race
go build -cover
将支持合并在不同 GOOS/GOARCH 环境中产生的覆盖率配置文件。
Go 提供了非常棒的测试和覆盖工具。尽管所有的围棋工具都有很好的 go tool cover -help文档,我还是建议阅读 官方围棋博客的封面故事。它有大量的例子,我强烈推荐它!
go tool cover -help
在我的 ~/. 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% 测试的东西!显示的结果是每个文件。从左上角的下拉列表中可以看到所有文件的结果。
cd
使用这个命令,您还可以检查任何包的覆盖范围,例如:
cover fmt
这个命令在终端中的输出将是:
ok fmt 0.031s coverage: 91.9% of statements
除此之外,在你的浏览器中,你会看到这个工具用红色显示所有没有被测试覆盖的代码行:
也可以只保存 html 覆盖率文件,而不是在浏览器中打开它。当您的测试 + 覆盖率由 CI 工具(如 Jenkins)运行时,这非常有用。这样,您可以从一个中央服务器提供覆盖率文件,整个团队将能够看到每个构建的覆盖率结果。
受到帮助菜单和这个问题的其他答案的启发,只需运行:
f=cover.out if [ -f $f ]; then rm $f fi go test ./... -coverprofile $f && \ go tool cover -html $f && \ rm $f
尝试使用 Gaia-docker/base-go-build Docker 图像。
这是一个 Docker 映像,其中包含构建和测试覆盖率所需的所有内容。 在 Docker 容器中运行测试覆盖率将创建具有项目测试覆盖率结果的 。覆盖文件夹。
docker run --rm -v "$PWD":$PROJECT_PATH -w $PROJECT_PATH $BUILDER_IMAGE_NAME /go/script/coverage.sh
测试覆盖率脚本运行在所有项目的文件夹上,并在 。覆盖文件夹中生成每个文件夹的 junit 和覆盖率报告,以及所有项目测试的综合覆盖率报告。
Codecov 还提出了一个收集覆盖率结果的脚本: 多个文件
戈兰测试覆盖率
去拿 github.com/axw/gocov/gocov 去找 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 覆盖工具 测试报告工具 替代方法 转到本机测试覆盖范围 go test -coverprofile=coverage.out go tool cover -html=coverage.out
检查它是否安装正确,并且您可以从您的终端访问
运行测试用例
如果您运行测试用例,它将在。Json 文件基于该文件,您将获得代码覆盖率报告。Html 文件
gocov test >your_Coverage_report.json
一旦您的测试用例完成,使用. json 在. html 文件中生成一个报告
gocov-html your_Coverage_report.json >your_Coverage_report.html
参考文献
GoTest 覆盖工具
测试报告工具
替代方法
转到本机测试覆盖范围
go test -coverprofile=coverage.out go tool cover -html=coverage.out
一个快速简单的方法是使用内置的覆盖率工具 go:
$测试覆盖文件 cp.out //以一个班轮的百分比发出覆盖率
执行上面的命令之后,如果您希望直观地看到代码覆盖率(如覆盖语句和错过等)
$go tool cover-html = cp.out
注意: 您需要在希望查看覆盖率的文件夹中执行上述命令
除了上面的好答案,我发现这三行是得到它的最简单的方法(包括所有的软件包) :
go test -v -coverprofile cover.out ./YOUR_CODE_FOLDER/... go tool cover -html cover.out -o cover.html open cover.html
请注意,在 HTML 文件中,您将发现一个下拉按钮,将指导您到所有文件。
有关其他选项,请参见 go tool cover -help。
如果你想直接在终端中看到没有覆盖的行,我为此重写了覆盖工具。https://github.com/gregoryv/uncover有售。
用法
go get -u github.com/gregoryv/uncover/... go test -coverprofile /tmp/c.out uncover /tmp/c.out
截图
报道范围:
A)运行所有测试并启用覆盖率—— > go test ./... -coverprofile coverage.out
go test ./... -coverprofile coverage.out
(b)获得个别职能的覆盖率以及总体覆盖率→ go tool cover -func coverage.out
go tool cover -func coverage.out
(c)看看你的测试覆盖的线和没有覆盖的线→ go tool cover -html=coverage.out -o coverage.html。打开在浏览器中生成的 coverage.html文件,分析详细的覆盖信息。
go tool cover -html=coverage.out -o coverage.html
coverage.html
如果您使用的是 VSCode,那么这个功能将得到现成的支持(但默认情况下是禁用的)
只要打开保存 + 覆盖率报告的测试
Https://github.com/microsoft/vscode-go/wiki/on-save-features
它甚至可以在你的编辑器中显示哪些行没有被覆盖,这非常方便。
跑就是了
go test -cover
或者
go test -cover ./...
go test -coverprofile=coverage.out ./... ; go tool cover -func=coverage.out
或者检查源代码
go test -coverprofile=coverage.out ./... ; go tool cover -html=coverage.out
如果您想在 Windows中找到测试覆盖率,只需转到 command prompt中所需的文件夹并键入以下命令:
Windows
command prompt
go test -coverprofile=coverage.out && go tool cover -html=coverage.out
这非常简单,工作可靠。
我在网上找不到这方面的工具。
事实上... ... 现在(2022年)在网络上有这样一个工具,来自 Nikolay Dubina的项目 go-cover-treemap-web:
go-cover-treemap-web
Https://go-cover-treemap.io/
它没有上传任何东西(处理仍然是本地的) ,但是通过拖放您的覆盖配置文件,Web UI (使用 Go WASM)将运行 go-cover-treemap并显示:
go-cover-treemap
(https://github.com/gohugoio/hugo的行政保险)
已经内置在 VSCode 中
绿色部分经过测试,而 红色没有经过测试