我如何找到哪些测试涵盖特定的Go代码?

我如何找到哪些测试涵盖特定的Go代码?,go,testing,visual-studio-code,code-coverage,Go,Testing,Visual Studio Code,Code Coverage,我试图找出是否有办法查看哪些测试覆盖了我的Go代码中的函数。我正在和其他开发人员一起编写代码,所以我没有自己编写所有的测试/代码 我看到一些函数被部分覆盖,或者几乎完全覆盖,但它们本身或其他包中没有引用,并且这些函数在任何测试中都没有直接调用 有没有办法找到哪些测试覆盖了特定的代码?当我试图找到它是否可能时,我得到的只是一些文章,展示了如何编写/运行测试,以及如何获得覆盖率/突出显示,但实际上没有任何文章显示它是否可能 作为记录,我在linux上使用VS代码并运行go测试-“我的终端”中的cov

我试图找出是否有办法查看哪些测试覆盖了我的Go代码中的函数。我正在和其他开发人员一起编写代码,所以我没有自己编写所有的测试/代码

我看到一些函数被部分覆盖,或者几乎完全覆盖,但它们本身或其他包中没有引用,并且这些函数在任何测试中都没有直接调用

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


作为记录,我在linux上使用VS代码并运行go测试-“我的终端”中的cover,以及Ctrl+Shift+P->Go:切换当前包中的测试覆盖率,以便在VS代码中突出显示覆盖率。

现在可以看到更完整的图片,通过评论,您似乎有一堆测试,这些测试是由对Go经验不足的人编写的,您的目标是清理测试以遵循标准的Go约定

如果我面临该任务,我的策略可能是禁用存储库中的所有测试,方法是使用从未执行过的构建标记,例如:

//+构建跳过 打包食品 通过运行go测试确认所有测试均已禁用。/-覆盖,并确认您的覆盖率为0%

然后,逐个测试,我会将每个测试移动到其适当的位置,并将其放入一个新文件中,而不带skip build标记

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


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

现在,通过评论可以看到更完整的图片,你似乎有一堆测试,是由一些对Go经验不足的人编写的,您的目标是清理测试以遵循标准的Go约定

如果我面临该任务,我的策略可能是禁用存储库中的所有测试,方法是使用从未执行过的构建标记,例如:

//+构建跳过 打包食品 通过运行go测试确认所有测试均已禁用。/-覆盖,并确认您的覆盖率为0%

然后,逐个测试,我会将每个测试移动到其适当的位置,并将其放入一个新文件中,而不带skip build标记

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


我也强烈抵制同时进行任何其他清理或修复的冲动。我的目标是使每个PR都成为一个简单的复制粘贴,因此审查很简单,我会保存一个我发现的其他清理的列表,然后再做。

打开代码覆盖工具后,执行单个测试很容易。我不确定这是否是你想要的,不过。。。听起来你想要相反的结果。这要困难得多,因为代码和测试之间没有1:1的关系换句话说:给定一行代码,它可以由任意数量的测试执行。为什么需要这个?这是一个非常不寻常的要求,似乎是一个XY问题。测试应该放在他们测试的代码旁边。如果他们不这样做,您的代码库可能会组织得更好。通常在foo_test.go或test/foo_test.go中测试foo.go。很少,您会在一个完全不同的目录中看到测试,但它们可能不是单元测试,并且计算这些测试的覆盖率的值最多是可疑的。如果我有这个任务,我可能会禁用所有测试,即使用一个从未遇到的构建标记,然后逐个重新启用它们,我走的时候把它们移到合适的地方。@T1960CT:一小步一小步地做!尽早且经常地做出承诺。如果你没有因为太多的拉取请求而烦扰你的同事,那么你可能是做错了:并且不要犹豫地向他们指出,如果他们第一次正确地编写了测试,你现在就不会清理他们的混乱了。在打开代码覆盖工具的情况下,执行单个测试是很容易的。我不确定这是否是你想要的,不过。。。听起来你想要相反的结果。这要困难得多,因为代码和测试之间没有1:1的关系换句话说:给定一行代码,它可以由任意数量的测试执行。为什么需要这个?这是一个非常不寻常的要求,似乎是一个XY问题。测试应该放在他们测试的代码旁边。如果他们不这样做,您的代码库可能会组织得更好。通常在foo_test.go或test/foo_test.go中测试foo.go。很少,您会看到完全不同的测试
nt目录,但它们可能不是单元测试,计算这些测试的覆盖率的值最多也不确定。如果我有这个任务,我可能会禁用所有测试,即使用从未遇到的构建标记,然后逐个重新启用它们,并在执行时将它们移动到正确的位置。@T1960CT:分小步执行!尽早且经常地做出承诺。如果你没有因为太多的pull请求而惹恼同事,那么你很可能是做错了:并且不要犹豫地向他们指出,如果他们第一次正确地编写了测试,你现在就不会收拾他们的烂摊子了。