如果单独执行一组测试,为什么会得到不同的结果?

时间:2018-07-20 18:30:42

标签: java intellij-idea junit kotlin

我有两个测试。如果我告诉Intellij测试它们两个(即测试包含它们的junit类),则测试2失败。如果仅运行测试1,则测试通过。如果然后运行测试2,则测试通过。您有什么主意,为什么会出现这种差异?

我已经告诉测试1在测试结束时等待10秒,以大致模拟手动执行测试1和测试2之间的差距。

谢谢。

2 个答案:

答案 0 :(得分:3)

没有源代码可以看,简单的答案是:您的测试不是独立的。

含义:它们以某种方式通过共享资源的某种 连接起来。每个测试都取决于该资源是否处于特定状态,但是以某种方式您的清理丢失或“不够好”。例如,当您仅在一次测试之前一次初始化存根/模拟,而在每次测试中一次一次初始化存根/模拟时,就会发生这种情况。最坏的情况是,依赖关系在生产代码中是 somewhere (深入),例如,某个类的 static 字段在执行首次测试时就被初始化,从而导致问题当第二个测试“来”时。

对于任何更具体的(基于代码的)建议,您将不得不分别与我们共享测试mcve

答案 1 :(得分:0)

事实证明,我每次使用库时都使用了伪随机种子。这只是伪造的,因为对于每个给定的运行,例如种子仍然是相同的。

在intellij中同时运行两个测试

使用1个种子进行测试:83

测试2使用的种子:34

再次在intellij中同时运行这两个测试

使用1个种子进行测试:83

测试2使用的种子:34

种子总是会被“随机”分配给相同的数字。

如果我单独运行每个测试,它将如下:

使用1个种子进行测试:83

测试2使用的种子:83

不可能在任何调试数据中看到它。

解决方案(以获得一致的行为)是每次运行该方法之前都设置一个特定的种子。