我的包中有一个生成的文件,上面有DO NOT EDIT个.我正在用go test -coverprofile=cover.out <package>测试我的软件包.这将创建覆盖率配置文件并显示总覆盖率百分比.但在计算覆盖率时,它还包括生成的文件.在覆盖率计算中有没有办法忽略生成的文件?

推荐答案

大多数围棋工具都是在包上操作的,因为一个包本身就形成了一个unit,这可能对它整体上很有用.从包中排除文件很容易" destruct "包:被排除的文件可能包含(关键的)包初始化代码,甚至可能导致剩余的包文件无法编译.

go test也不例外:它也对包进行操作.没有直接支持从包中排除文件.

如果您的包可以在没有生成文件的情况下编译和测试,您可以 Select 将该文件生成到不同的包中,然后它将不会自然地包含在包的(覆盖率)测试中.

处理这一问题的另一种方法是仍然在相同的包/文件夹中生成它,并在生成的文件中使用特殊的构建标记,在运行覆盖测试时可以排除这些标记.您可以在此处:Build Constraints和此处:What is the right approach to encapsulate platform specific code in Go?阅读更多关于构建标记的内容

如果需要生成的文件来编译/测试包,那么您仍然可以 Select :对生成的文件使用internal包.内部包只对以internal文件夹为根的包树可用,这意味着您可以导出内部包中的任何标识符,编译器确保它们不会被"非预期的"各方使用.您可以在此处阅读有关内部包的更多信息:Can I develop a go package in multiple source directories?

还要考虑为生成的代码编写或生成测试的选项,这可能是一个很好的实践,这样您就不必使用技巧将它们排除在覆盖范围测试之外.

Go相关问答推荐

Go:嵌入类型不能是类型参数""

golang 的条件储存库

GitHub发布Golang子模块

日志(log)文件不在 golang 的日志(log)目录中

在 GoLang 中对自定义 struct 体数组进行排序

如何在 fyne-io/fyne 中设置文本的字母间距?

如何使用泛型将接口转换为指定类型

使用 unsafe.Pointer 将 struct point直接转换为另一个 struct 是否安全?

无法使用 gocsv 读取引用字段

emersion/go-imap - imap.FetchRFC822:无效内存地址或零指针取消引用

CORS grpc 网关 GoLang

具有未导出字段的 struct 类型之间的转换

我相信我正确地在 sRGB 和线性 RGB 之间进行了转换,那么为什么深色的结果看起来更糟呢?

go:识别重新定义标志的包

如何使用 Status 字段创建 Kubernetes 对象?

Golang grpc go.mod 问题

使用 LoadLibraryA(path_to_dll) 加载 DLL 会将文件描述符 0、1 和 2 的继承句柄标志 (HANDLE_FLAG_INHERIT) 从 1 更改为 0

防止在 Go 公用文件夹中列出目录

如何使用 httputil.ReverseProxy 设置 X-Forwarded-For

并发 map map导致的 Golang 数据竞争