如何忽略来自Go测试覆盖的生成文件

我在我的软件包中有一个生成的文件,在顶部DO NOT EDIT 。 我使用go test -coverprofile=cover.out <package>运行我的软件包go test -coverprofile=cover.out <package> 。 这将创建覆盖范围配置文件并显示总覆盖率。 但它也包括计算覆盖率时生成的文件。 有没有办法在覆盖率计算中忽略生成的文件?


大多数Go工具都在包上运行,因为包本身形成了一个可能完整有用的单元。 从软件包中排除文件可能会轻易“中断”软件包:排除的文件可能包含(至关重要的)软件包初始化代码,甚至可能导致其余软件包文件无法编译。

go test也不例外:它也在包上运行。 没有第一手支持从包中排除文件。

如果您的软件包可能没有生成的文件进行编译和测试,您可以选择将该文件生成到不同的软件包中,然后自然不会将其包含在软件包的(覆盖率)测试中。

处理这种情况的另一种方法是仍然在同一个包/文件夹中生成它,并在生成的文件中使用特殊的构建标记,在运行coverage测试时可能会排除这些标记。 您可以在这里阅读关于构建标记的更多信息:构建约束,以及:在Go中封装平台特定代码的正确方法是什么?

如果需要生成的文件来编译/测试软件包,那么您仍然有一个选择:对生成的文件使用内部软件包。 内部软件包仅适用于以internal文件夹为根的软件包树,这意味着您可以在内部软件包中导出任何标识符,编译器确保它们不会被“非意图”方使用。 你可以在这里阅读更多关于内部包的信息:我可以在多个源目录中开发一个包吗?

还要考虑为生成的代码编写或生成测试的选项,无论如何这可能是一个很好的做法,所以您不必使用技巧将它们从覆盖测试中排除。


您可以从封面配置文件中去除生成的代码:

go test . -coverprofile cover.out.tmp
cat cover.out.tmp | grep -v "_generated.go" > cover.out
tool cover -func cover.out

根据使用的工具,这可以在管线/制造中轻松实现。

链接地址: http://www.djcxy.com/p/41569.html

上一篇: How to ignore Generated files from Go test coverage

下一篇: Process communication of Python's Multiprocessing