【问题标题】:How to have code coverage for test packages in Go如何在 Go 中对测试包进行代码覆盖
【发布时间】:2020-02-21 14:48:55
【问题描述】:

我正在尝试为我的golang 项目生成代码覆盖率。

我的设置如下:

- my_project
|  - my_package
|  |  - my_dev_file.go
|  |  - test
|  |  |  - my_dev_file_test.go

此设置允许从调用包的客户端的角度测试代码,而无需了解其内部实现。在销售时,开发目录和测试目录是明确分开的,这增强了项目的全局可读性。

测试代码如下所示:

import (
    "..."
    "testing"
    "path-to/my_package"
    "..."
)

func TestSomething(t *testing.T) {
    t.Run("should do something", func(t *testing.T) {
       my_package.MyStruct.DoSomething()

       // test something...
    })
}

就测试而言,此设置工作正常。

但是,我似乎无法生成覆盖率报告。覆盖范围是 0% 无论我启动什么命令,都以:

go test -coverprofile=coverage.out ./.../test
OK path-to/test       0.005s  coverage: 0.0% of statements
OK other-path-to/test 0.007s  coverage: 0.0% of statements

我正在寻找一种在不影响项目组织方式的情况下生成适当代码覆盖率的方法。

可以吗?

【问题讨论】:

  • 测试和线路覆盖是在每个包的基础上完成的。导入的包不被认为是在测试中。重组,因为你的项目组织得很糟糕,没有什么可以“妥协”的。
  • 我明白你的意思。然而,我不明白逻辑:golang 提供了将测试作为生产代码放在单独的包中的可能性,这完全合理。如果事后无法计算代码覆盖率,为什么还要提供这种可能性???
  • 没有。为什么在技术上可以为包 a 中的包 a 编写测试(使用 a not b_test)这绝对不推荐或鼓励。您正在滥用工具。顺便说一句:该语言称为“Go”。

标签: go testing code-coverage


【解决方案1】:

你应该跑

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

【讨论】:

  • 我试过了,还是不行。如果它对您有用,那么这可能意味着我的问题来自其他地方。实际上我已经开发了一个小的“断言”库,所以我不必一遍又一遍地编写相同的断言。这可能是我的问题...我需要对此进行测试。
  • 其实我没有任何错误信息!!测试顺利且OK。我只是没有任何报道......
  • 只需安装 Visual Studio 代码并安装 golang 插件,然后转到测试文件,然后右键单击并选择当前包中的切换测试覆盖率,它将以图形方式显示代码中的覆盖率以及终端
  • @ASHWINRAJEEV 嘿伙计,谢谢您的评论。然而,这对我的项目来说不是一个好习惯,因为我需要自动化一切。就我而言,代码覆盖率不能依赖于安装 IDE。
猜你喜欢
  • 2016-05-04
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 2018-11-05
  • 2016-01-31
  • 1970-01-01
  • 1970-01-01
  • 2019-02-11
相关资源
最近更新 更多