2

当我在 Go 中运行测试时,有什么方法可以直接或间接获取代码导入的文件列表?例如,这可以帮助我在调试失败的测试时排除来自代码库某些部分的更改。

或者,使用 Git,我们能否找出在给定测试中执行的文件的最低共同祖先 git 树节点是什么?

上下文:我正在为我的测试套件研究自动片状检测,并且我希望能够了解每个测试的依赖关系树,以便更好地检测片状测试。

例如,如果代码TestX版本失败x,并且稍后在同一代码库中的一些根本不使用的文件TestX被更改,然后TestX通过,我希望能够检测到这是一个不稳定的测试,即使运行测试套件的整体代码库已经改变。

4

1 回答 1

3

您可能正在寻找go list -test -deps [packages].

有关标志的作用的说明,您可以查看 Go 命令List packages or modules

-deps

-deps标志导致 list 不仅遍历命名包,还遍历它们的所有依赖项。它以深度优先的后序遍历方式访问它们,因此包仅在其所有依赖项之后列出。[...]

-test

-test标志list不仅会报告命名的包,还会报告它们的测试二进制文件(对于带有测试的包),以向源代码分析工具准确传达测试二进制文件的构建方式。报告的测试二进制文件的导入路径是包的导入路径,后跟“.test”后缀,如“math/rand.test”。[...]

也许我会说显而易见的,但请记住,它list适用于包,而不是单个文件,所以上面的命令将包括非测试源的依赖项(无论如何这应该是你想要的)。

于 2021-08-04T08:44:12.463 回答