Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果单独执行一组测试,为什么执行一组测试会得到不同的结果?_Java_Intellij Idea_Junit_Kotlin - Fatal编程技术网

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

Java 如果单独执行一组测试,为什么执行一组测试会得到不同的结果?,java,intellij-idea,junit,kotlin,Java,Intellij Idea,Junit,Kotlin,我有两个测试。如果我告诉Intellij同时测试它们(即测试包含它们的junit类),测试2将失败。如果我只运行测试1,它就会通过。如果我运行测试2,它就会通过。你知道为什么会有这种差异吗 我已经告诉测试1在测试结束时等待10秒,大致模拟我手动执行测试1和测试2之间的差距 谢谢。如果没有源代码,简单的答案是:您的测试不是独立的 意思是:它们通过某种共享资源以某种方式连接在一起。每个测试都依赖于该资源处于特定状态,但不知何故,您的清理要么缺失,要么“不够好”。例如,当您仅初始化存根/模拟一次(在第

我有两个测试。如果我告诉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失败。感谢您的回复!现在我将看一看我的静态方法和相关对象……谢谢你的回复!现在我将看看我的静态方法和相关对象。。。