如何测量Golang的代码覆盖率?
有没有人成功地为Gounit testing生成代码覆盖? 我无法在networking上find该工具。
请注意, Go 1.2(2013年第四季度,rc1可用)现在将显示testing覆盖率结果 :
go test
一个主要新function是现在可以计算,并在新的单独安装的“go tool cover
”程序的帮助下显示testing覆盖率结果 。
cover
工具是go.tools
库的一部分。 它可以通过运行来安装
$ go get golang.org/x/tools/cmd/cover
封面工具做两件事。
- 首先,当“
go test
”被赋予-cover
标志时,它将自动运行以重写包的源代码并插入检测语句。 testing然后像往常一样编译和运行,并报告基本的覆盖率统计信息:
$ go test -coverprofile fmt ok fmt 0.060s coverage: 91.4% of statements $
其次,对于更详细的报告,不同的标志“去testing”可以创build一个覆盖configuration文件,然后用“
go tool cover
”调用封面程序进行分析。
Frank Shearar 提到 :
Go(2013/09/19)的最新版本使用:
go test -coverprofile <filename> <package name>
有关如何生成和分析覆盖范围统计信息,可以通过运行命令find
$ go help testflag $ go tool cover -help
伊万·布莱克 在评论中提到:
go test -coverprofile cover.out
然后
go tool cover -html=cover.out -o cover.html
cover.html
在浏览器中打开cover.html
我甚至不想等待浏览器打开,所以我定义了这个别名:
alias gc=grep -v -e " 1$" coverage.out
我只需inputgc
,并列出所有尚未覆盖的行(这里: coverage.out
行不以“ 1
”结尾)。
去与真棒工具testing和覆盖面。 虽然所有的Go工具都有很好的文档,但是我会build议阅读官方Go博客上的封面故事文章 。 它有很多的例子,我强烈推荐它!
我在〜/ .bash_profile中有这个函数。 (你可以把它粘贴到terminal来试试看)。
cover () { t="/tmp/go-cover.$$.tmp" go test -coverprofile=$t $@ && go tool cover -html=$t && unlink $t }
然后只要进入一个去项目/包文件夹,然后键入cover
。 这将在浏览器中打开一个可视化工具,向您显示当前包中每个文件的经过testing和未经testing的代码。 非常有用的命令! 我强烈build议它find什么不是100%testing呢! 显示的结果是每个文件。 从左上angular的下拉菜单中,您可以看到所有文件的结果。
有了这个命令,你也可以检查任何包的覆盖范围,例如:
cover fmt
从这个命令的terminal输出将是:
ok fmt 0.031s coverage: 91.9% of statements
除此之外,在您的浏览器中,您将看到此工具以红色显示所有未覆盖testing的代码行:
也可以保存html覆盖文件而不是在浏览器中打开它。 当您的testing+覆盖由像jenkins这样的CI工具运行时,这非常有用。 这样,您可以从中央服务器提供覆盖率文件,整个团队将能够查看每个构build的覆盖率结果。
就在这里 , 这里有一些文档。
$ 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 $
我没有用过,这就是我所知道的。
受到这个问题的帮助菜单和其他答案的启发,只需运行:
f=cover.out; if [ -f $f ]; then rm $f; fi; go test -coverprofile $f && go tool cover -html $f
尝试使用gaia-docker / base-go-build Docker Image。
这是Docker映像包含了构build和testing覆盖范围所需的全部内容。 在Docker容器中运行testing覆盖率将创build带有项目testing覆盖率结果的.cover文件夹。
docker run --rm -v "$PWD":$PROJECT_PATH -w $PROJECT_PATH $BUILDER_IMAGE_NAME /go/script/coverage.sh
在所有项目文件夹上运行的testing覆盖脚本 ,并在每个文件夹的.cover文件夹junit和coverage报告中生成testing覆盖率脚本 ,以及所有项目testing的联合覆盖率报告。