基本上,我使用一些基本的测试结构在特定的包中创建了一个新的测试文件-没有实际的tests...just,一个嵌入suite.Suite的空结构类型,以及一个接受*testing.T对象并在所述结构上调用suite.Run()的函数。这立即导致我们的所有其他测试开始不确定地失败。
失败的性质与在单个Postgres DB中插入和删除时违反数据库唯一键完整性有关。这让我相信测试是并发运行的,而没有调用我们的setup方法来在测试之间正确地准备环境。
不用说,当我将这个测试文件移到另一个包中时,一切都神奇地工作了!
以前有没有其他人遇到过这个问题,可以提供一些见解?

发布于 2014-11-01 19:23:40
我在使用过程中发现,"go test“按顺序运行单个包的测试用例(除非调用t.Parallel() ),但如果您提供多个包(go test ./foo ./bar ./baz),则每个包的测试将与其他包并行运行。对我来说,数据库测试肯定也引起了类似的麻烦。
发布于 2014-11-04 08:28:09
事实证明,这是一个根植于go测试工作方式的问题,与testify无关。我们的测试是在上运行的。/...正如justinas指出的那样,这会导致下划线go测试工具在每个包中并行运行测试。在深入研究StackOverflow (here和here)和阅读testify's active issue on this problem之后,似乎最好的直接解决方案是使用-p=1标志来限制并行运行的包的数量。
然而,仍然不能解释为什么在添加这些新的包之前测试总是通过的。一种预感是,包/测试文件可能是以这样的方式排序和运行的,即在添加新的包/文件之前,并发性不是问题。
https://stackoverflow.com/questions/26641454
复制相似问题