首页 > 解决方案 > 如何找到涵盖特定 Go 代码的测试?

问题描述

我试图弄清楚是否有办法查看哪些测试涵盖了我的 Go 代码中的功能。我正在与其他开发人员一起开发代码库,所以我没有自己编写所有测试/代码。

我看到一些被部分覆盖或几乎完全覆盖的函数,但它们在任何地方都没有引用(在它自己的或其他包中),并且在任何测试中都没有直接调用这些函数。

有没有办法可以找到哪些测试覆盖了该特定代码?当我试图找到它是否可能时,我得到的只是展示如何编写/运行测试并获得覆盖率/突出显示的文章,但实际上没有任何内容显示它是否可能。

作为记录,我在 linux 上使用 VS Code 并go test ./... -cover在我的终端中运行,以及Ctrl+Shift+P -> "Go: Toggle Test Coverage In Current Package"在 VS Code 中突出显示覆盖范围。

标签: gotestingvisual-studio-codecode-coverage

解决方案


现在通过评论看到更全面的情况,您似乎有一堆测试,由对 Go 缺乏经验的人编写,您的目标是清理测试以遵循标准的 Go 约定。

如果我面临该任务,我的策略可能是禁用存储库中的所有测试,方法是使用永远不会执行的构建标签,例如:

// +build skip

package foo

通过运行确认所有测试都已禁用,go test ./... -cover并确认您在所有地方都有 0% 的覆盖率。

然后,逐个测试,我会将每个测试移到适当的位置,并将其放入没有skip构建标签的新文件中。

如果这是一个大项目,我可能会一次做一个包,或者在一些其他小的、合乎逻辑的步骤中,以避免一个巨大的拉取请求。在这里使用你自己的判断。

我也强烈抵制同时进行任何其他清理或修复的冲动。我的目标是让每个 PR 都成为一个简单的复制粘贴,所以审查是微不足道的,我会保存我发现的其他清理列表,以便以后做。


推荐阅读