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

Blu*_*gma 5 unit-testing code-coverage go

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

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

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

小智 8

运行后:

go test --coverprofile=coverage.out ./...
Run Code Online (Sandbox Code Playgroud)

跑步:

go tool cover -func=coverage.out
Run Code Online (Sandbox Code Playgroud)

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

  • 您必须为带有包声明的每个 ***.go 文件创建一个 ***_test.go 文件,即使您没有对该给定文件进行任何测试。否则,您的指标将不会考虑未经测试的文件,并且覆盖百分比将不会反映您的项目。 (2认同)

Blu*_*gma 3

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

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

go test --coverprofile=coverage.out ./...
Run Code Online (Sandbox Code Playgroud)

然后我运行 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 < "$1"
echo $(awk "BEGIN { pc=100*${covered}/${total}; i=int(pc); print (pc-i<0.5)?i:i+1 }")
Run Code Online (Sandbox Code Playgroud)