【问题标题】:How to get a global test coverage for a folder如何获得文件夹的全局测试覆盖率
【发布时间】:2021-07-04 18:24:35
【问题描述】:

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

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

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

【问题讨论】:

  • 不,没有。你需要一个外部工具。
  • @Volker:你知道任何外部工具吗?
  • 工具请求是题外话。但我不知道有任何命令行工具可以做到这一点,但 codecov.io 会做到这一点,但这对于你所寻求的可能有点矫枉过正。
  • @volker :我想指出“不,没有”不是答案,事实上我确实找到了一种方法。
  • @BlueMagma:您提供的答案实际上证明了沃尔克的观点。您必须构建自己的外部工具。

标签: unit-testing go code-coverage


【解决方案1】:

运行后:

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

运行:

go tool cover -func=coverage.out

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

【讨论】:

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

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

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

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 < "$1"
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。请注意,您需要为您的根包指定测试运行,而不是全部(./...)
【解决方案3】:

您可以在没有任何外部工具的情况下覆盖所有子包/使用:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-12
    • 2019-11-06
    • 1970-01-01
    • 2022-11-11
    • 2015-04-01
    • 1970-01-01
    • 2018-02-08
    • 1970-01-01
    相关资源
    最近更新 更多