【问题标题】:Testify is seemingly running test suites concurrrently?Testify 似乎在同时运行测试套件?
【发布时间】:2014-12-25 19:30:23
【问题描述】:

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

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

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

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

【问题讨论】:

  • 我根本不知道作证。 (而且我不知道那个 WAT 鸭子是否会被删除,哈哈。)但是想知道它是否可能是正在测试的代码中的流氓并发,框架可能无法控制:后台 goroutine 无意中保持运行或其他.
  • WAT 鸭子应该是一个东西,就像这里回答的 50% 的问题应该有一样。
  • 可以登录进入和离开测试以查看它们是否重叠,记录您的测试和设置功能何时运行等。似乎我们没有通用答案(我们共享您的 WAT),所以所有剩下的就是深入研究测试中发生的事情。

标签: unit-testing go testify


【解决方案1】:

我从使用中发现,“go test”顺序运行单个包的测试用例(除非调用t.Parallel()),但如果您提供多个包(go test ./foo ./bar ./baz),每个包的测试都是与其他软件包并行运行。对我来说,数据库测试肯定会引起类似的头痛。

【讨论】:

    【解决方案2】:

    事实证明,这是一个根源于 go test 工作原理的问题,与 testify 无关。我们的测试是在 ./... 上运行的,正如 justinas 所指出的那样,这会导致带下划线的 go 测试工具在每个包中并行运行测试。在深入了解 StackOverflow(herehere)并阅读 testify's active issue on this problem 之后,似乎最好的直接解决方案是使用 -p=1 标志来限制并行运行的包。

    但是,仍然无法解释为什么在添加这些新软件包之前测试始终通过。预感可能是包/测试文件在添加新包/文件之前以不存在并发问题的方式排序和运行。

    【讨论】:

      猜你喜欢
      • 2014-11-11
      • 1970-01-01
      • 2022-08-17
      • 1970-01-01
      • 1970-01-01
      • 2020-06-14
      • 2011-10-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多