如何测量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的联合覆盖率报告。