【发布时间】: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