Unit testing 验证是否同时运行测试套件?

Unit testing 验证是否同时运行测试套件?,unit-testing,go,testify,Unit Testing,Go,Testify,基本上,我在一个特定的包中创建了一个新的测试文件,其中包含一些基本的测试结构-没有实际的测试…只有一个嵌入suite.suite的空结构类型,以及一个接受*testing.T对象并在所述结构上调用suite.Run()的函数。这立即导致我们所有的其他测试开始不确定地失败 故障的性质与在单个Postgres DB中插入和删除时违反数据库唯一密钥完整性有关。这使我相信测试是并行运行的,而没有调用我们的设置方法来在测试之间正确地准备环境 不用说,当我将这个测试文件移动到另一个包时,一切都神奇地工作了

基本上,我在一个特定的包中创建了一个新的测试文件,其中包含一些基本的测试结构-没有实际的测试…只有一个嵌入suite.suite的空结构类型,以及一个接受*testing.T对象并在所述结构上调用suite.Run()的函数。这立即导致我们所有的其他测试开始不确定地失败

故障的性质与在单个Postgres DB中插入和删除时违反数据库唯一密钥完整性有关。这使我相信测试是并行运行的,而没有调用我们的设置方法来在测试之间正确地准备环境

不用说,当我将这个测试文件移动到另一个包时,一切都神奇地工作了

以前有没有其他人遇到过这个问题,并可能提供一些见解


我从使用中发现,“go test”按顺序运行单个包的测试用例(除非调用了
t.Parallel()
),但如果您提供多个包(
go test./foo./bar./baz
),则每个包的测试将与其他包并行运行。显然,数据库测试也给我带来了类似的麻烦。

事实证明,这是一个根源于go test如何工作的问题,与证明无关。正如justinas指出的那样,我们的测试是在/…上运行的,这会导致下面的go测试工具在每个包中并行运行测试。在深入研究StackOverflow(and)并通读之后,似乎最好的即时解决方案是使用-p=1标志来限制并行运行的包数


然而,仍然无法解释为什么在添加这些新包之前测试始终通过。有一种预感是,在添加新的包/文件之前,包/测试文件的排序和运行方式使得并发性不是问题。

我一点也不知道。(我不知道WAT duck是否会被编辑掉,哈哈。)但我想知道这是否可能是正在测试的代码中的流氓并发,框架可能无法控制:后台goroutines无意中离开运行或其他。WAT duck应该是一个东西,这里回答的问题中有50%应该有这样的答案。可以登录进入和离开测试,看看它们是否重叠,记录测试和设置功能运行的时间,等等。似乎我们没有一个通用的答案(我们共享您的WAT),所以剩下的就是深入了解您的测试中发生了什么。