学习Go的代码覆盖率

551 阅读1分钟

学习Go的代码覆盖率

Go中的代码覆盖包含在工具链中,它就像在通常的go test 命令中添加-coverprofile ,有点像使用。

go test -coverprofile=cover.out <package-name>

假设所有测试都通过了,那么你应该得到一个类似的输出。

ok  	<package-name>	0.046s	coverage: <XY.Z>% of statements

其中XY.Z是实际的代码覆盖率。注意,coverprofile文件,cover.out ,可以用来生成更人性化的输出,如HTML,用。

go tool cover -html=cover.out -o coverage/index.html

当你只做一个包的时候,这个工作流程是完美的,但是如果你在做一个单行本的时候,获得总的代码覆盖率需要一点额外的工作。

gocovmerge是一个用Go编写的工具,可以将多个coverprofiles合并成一个,例如,假设你生成了两个coverprofiles:cover1.outcover2.out ,你可以使用。

gocovmerge cover*out > profiles_merged

然后我们可以用它来正确地生成一个单一的HTML文件,用。

go tool cover -html=profiles_merged -o coverage/index.html

但更重要的是,用: 来生成一个总的百分比。

go tool cover -func=profiles_merged > coverage_output

有了它,你就可以用类似的方法得到真正的最终覆盖率。

tail -n 1 coverage_output | tr -s '\t' ' ' | sed -n 's/.*\([0-9][0-9]\).*/\1/p'