Java 如果单独执行一组测试,为什么执行一组测试会得到不同的结果?
我有两个测试。如果我告诉Intellij同时测试它们(即测试包含它们的junit类),测试2将失败。如果我只运行测试1,它就会通过。如果我运行测试2,它就会通过。你知道为什么会有这种差异吗 我已经告诉测试1在测试结束时等待10秒,大致模拟我手动执行测试1和测试2之间的差距Java 如果单独执行一组测试,为什么执行一组测试会得到不同的结果?,java,intellij-idea,junit,kotlin,Java,Intellij Idea,Junit,Kotlin,我有两个测试。如果我告诉Intellij同时测试它们(即测试包含它们的junit类),测试2将失败。如果我只运行测试1,它就会通过。如果我运行测试2,它就会通过。你知道为什么会有这种差异吗 我已经告诉测试1在测试结束时等待10秒,大致模拟我手动执行测试1和测试2之间的差距 谢谢。如果没有源代码,简单的答案是:您的测试不是独立的 意思是:它们通过某种共享资源以某种方式连接在一起。每个测试都依赖于该资源处于特定状态,但不知何故,您的清理要么缺失,要么“不够好”。例如,当您仅初始化存根/模拟一次(在第
谢谢。如果没有源代码,简单的答案是:您的测试不是独立的 意思是:它们通过某种共享资源以某种方式连接在一起。每个测试都依赖于该资源处于特定状态,但不知何故,您的清理要么缺失,要么“不够好”。例如,当您仅初始化存根/模拟一次(在第一次启动之前),而不是每次测试初始化一次时,就会发生这种情况。最糟糕的情况是,依赖关系在生产代码的某个地方(深层),例如,在执行第一个测试时初始化的某个类上的静态字段,当第二个测试“通过”时会导致问题
对于任何更具体的(基于代码的)建议,您必须分别与我们分享您的测试。如果没有源代码,简单的答案是:您的测试不是独立的 意思是:它们通过某种共享资源以某种方式连接在一起。每个测试都依赖于该资源处于特定状态,但不知何故,您的清理要么缺失,要么“不够好”。例如,当您仅初始化存根/模拟一次(在第一次启动之前),而不是每次测试初始化一次时,就会发生这种情况。最糟糕的情况是,依赖关系在生产代码的某个地方(深层),例如,在执行第一个测试时初始化的某个类上的静态字段,当第二个测试“通过”时会导致问题
对于任何更具体的(基于代码的)建议,您必须分别与我们共享您的测试。事实证明,我使用的库在每次运行时都使用伪随机种子。它只是伪的,因为种子对于每个给定的运行仍然是相同的 在intellij中同时运行两个测试 试验1使用的种子:83 试验2使用的种子:34 再次在intellij中同时运行两个测试 试验1使用的种子:83 试验2使用的种子:34 种子总是“随机”分配给相同的数字 如果我单独运行每个测试,它将如下所示: 试验1使用的种子:83 试验2所用种子:83 在任何调试数据中都无法看到这一点
解决方案(获得一致的行为)是在每次运行该方法之前设置一个特定的种子。结果表明,我使用的库在每次运行时都使用一个伪随机种子。它只是伪的,因为种子对于每个给定的运行仍然是相同的 在intellij中同时运行两个测试 试验1使用的种子:83 试验2使用的种子:34 再次在intellij中同时运行两个测试 试验1使用的种子:83 试验2使用的种子:34 种子总是“随机”分配给相同的数字 如果我单独运行每个测试,它将如下所示: 试验1使用的种子:83 试验2所用种子:83 在任何调试数据中都无法看到这一点
解决方案(以获得一致的行为)是在每次运行该方法之前设置一个特定的种子。最有可能的是,在运行测试2时,测试1中的遗留条件仍然存在。是否可以显示测试?看起来两个测试都修改了相同的资源,并且在完成后不会恢复其更改。像test1一样,在数据库中插入记录,然后检查是否只存在一条记录。然后测试1不会删除该记录。然后test2插入另一条记录并检查表中是否只有一条记录,但现在有两条记录(一条来自test1,另一条来自test2)因此,test2失败。运行测试2时,测试1的遗留条件很可能仍然存在。您可以显示测试吗?看起来两个测试都修改了相同的资源,并且在完成后不会恢复其更改。像test1一样,在数据库中插入记录,然后检查是否只存在一条记录。然后测试1不会删除该记录。然后test2插入另一条记录并检查表中是否只有一条记录,但现在有两条记录(一条来自test1,另一条来自test2),因此test2失败。感谢您的回复!现在我将看一看我的静态方法和相关对象……谢谢你的回复!现在我将看看我的静态方法和相关对象。。。