学习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.out 和cover2.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'