我有两个测试。如果我告诉Intellij测试它们两个(即测试包含它们的junit类),则测试2失败。如果仅运行测试1,则测试通过。如果然后运行测试2,则测试通过。您有什么主意,为什么会出现这种差异?
我已经告诉测试1在测试结束时等待10秒,以大致模拟手动执行测试1和测试2之间的差距。
谢谢。
答案 0 :(得分:3)
没有源代码可以看,简单的答案是:您的测试不是独立的。
含义:它们以某种方式通过共享资源的某种 连接起来。每个测试都取决于该资源是否处于特定状态,但是以某种方式您的清理丢失或“不够好”。例如,当您仅在一次测试之前一次初始化存根/模拟,而在每次测试中一次一次初始化存根/模拟时,就会发生这种情况。最坏的情况是,依赖关系在生产代码中是 somewhere (深入),例如,某个类的 static 字段在执行首次测试时就被初始化,从而导致问题当第二个测试“来”时。
对于任何更具体的(基于代码的)建议,您将不得不分别与我们共享测试mcve。
答案 1 :(得分:0)
事实证明,我每次使用库时都使用了伪随机种子。这只是伪造的,因为对于每个给定的运行,例如种子仍然是相同的。
在intellij中同时运行两个测试
使用1个种子进行测试:83
测试2使用的种子:34
再次在intellij中同时运行这两个测试
使用1个种子进行测试:83
测试2使用的种子:34
种子总是会被“随机”分配给相同的数字。
如果我单独运行每个测试,它将如下:
使用1个种子进行测试:83
测试2使用的种子:83
不可能在任何调试数据中看到它。
解决方案(以获得一致的行为)是每次运行该方法之前都设置一个特定的种子。