我有一个包含几个程序包的库。在运行测试时,我使用'-cover'标志,它单独显示每个软件包的覆盖率信息,如下所示:

--- PASS: TestSampleTestSuite (0.00s)
PASS
coverage: 28.7% of statements
ok      github.com/path/to/package1 13.021s
?       github.com/path/to/package2 [no test files]

=== RUN   TestAbc
--- PASS: TestAbc (0.43s)
PASS
coverage: 27.7% of statements

有什么方法可以轻松地获得完整的覆盖范围概述,以便对整个项目的覆盖范围有个好主意?

更新:这是我正在使用的go test命令
go test ./... -v -short -p 1 -cover

最佳答案

编辑:自从我写了这个答案以来,事情已经改变了。请参阅Go 1.10的发行说明:https://golang.org/doc/go1.10#test:



您现在可以运行

go test -v -coverpkg=./... -coverprofile=profile.cov ./...
go tool cover -func profile.cov

旧答案

这是从https://github.com/h12w/gosweep中提取的bash脚本:

#!/bin/bash
set -e

echo 'mode: count' > profile.cov

for dir in $(find . -maxdepth 10 -not -path './.git*' -not -path '*/_*' -type d);
do
if ls $dir/*.go &> /dev/null; then
    go test -short -covermode=count -coverprofile=$dir/profile.tmp $dir
    if [ -f $dir/profile.tmp ]
    then
        cat $dir/profile.tmp | tail -n +2 >> profile.cov
        rm $dir/profile.tmp
    fi
fi
done

go tool cover -func profile.cov

关于unit-testing - 如何在Go中将所有程序包的代码覆盖范围汇总在一起?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33444968/

10-16 09:28