有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么执行一组测试会给单独执行的测试带来不同的结果?

我有两个测试。如果我告诉Intellij同时测试它们(即测试包含它们的junit类),测试2将失败。如果我只运行测试1,它就会通过。如果我运行测试2,它就会通过。你知道为什么会有这种差异吗

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

谢谢


共 (2) 个答案

  1. # 1 楼答案

    如果没有源代码,简单的答案是:您的测试不是独立的

    意思:它们通过某种共享资源的连接起来。每个测试都依赖于该资源处于特定状态,但不知何故,您的清理要么缺失,要么“不够好”。例如,当您初始化存根/模拟只一次(在第一次启动之前),而不是每次测试一次时,就会发生这种情况。最糟糕的情况是,依赖关系在生产代码中的某个地方(深层),例如,在执行第一个测试时初始化的某个类上的静态字段,当第二个测试“通过”时会导致问题

    对于任何更具体的(基于代码的)建议,您必须与我们共享您的测试,分别是amcve

  2. # 2 楼答案

    结果发现,我使用的一个库在每次运行时都使用了一个伪随机种子。它只是伪的,因为种子对于每个给定的运行仍然是相同的

    在intellij中同时运行两个测试

    试验1使用的种子:83

    试验2使用的种子:34

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

    试验1使用的种子:83

    试验2使用的种子:34

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

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

    试验1使用的种子:83

    试验2所用种子:83

    在任何调试数据中都无法看到这一点

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