如何获得文件夹的全局测试覆盖率

How to get a global test coverage for a folder

显示代码覆盖率时,去测试显示每个包的代码覆盖率(百分比)。

有没有办法显示一个文件夹的摘要,并考虑到所有子文件夹(子包)?

我想要的是整个项目的全局代码覆盖率,一个显示文件夹和所有子文件夹的代码覆盖率的数字。

我找到了解决问题的方法。

我首先运行对所有包进行测试并将测试结果存储在一个文件中:

go test --coverprofile=coverage.out ./...

然后我运行一个bash脚本来计算我的结果

#!/usr/bin/env bash

covered=0
total=0
while IFS='' read -r line || [[ -n "$line" ]]; do
    IFS=' ' read -r -a array <<< "$line"
    total=$(($total+${array[1]}))
    if [ "${array[2]}" = "1" ]; then
        covered=$(($covered+${array[1]}))
    fi 
done < ""
echo $(awk "BEGIN { pc=100*${covered}/${total}; i=int(pc); print (pc-i<0.5)?i:i+1 }")

无需任何外部工具/使用:

即可覆盖所有子包
go test --coverprofile=coverage.out -coverpkg=./your/package/... ./your/package
-coverpkg pattern1,pattern2,pattern3
    Apply coverage analysis in each test to packages matching the patterns.
    The default is for each test to analyze only the package being tested.
    See 'go help packages' for a description of package patterns.
    Sets -cover.

https://golang.org/cmd/go/#hdr-Testing_flags

运行之后:

go test --coverprofile=coverage.out ./...

运行:

go tool cover -func=coverage.out

您将在结果末尾看到总百分比