gpt4 book ai didi

java - JUnit执行顺序

转载 作者:行者123 更新时间:2023-11-30 07:56:56 24 4
gpt4 key购买 nike

所以我找到了一种方法来在一个类中使用 @FixMethodOrder 对 junit 测试进行排序,但是阅读文档时我遇到了一些我不理解的东西:

类内 JUnit 测试的默认执行顺序是确定性的但不可预测。 Java 7(和一些以前的版本)的执行顺序无法保证,甚至可以在每次运行时发生变化,因此执行顺序已更改为确定性的(在 JUnit 4.11 中)

在我的学习期间,我从未遇到过任何既确定又不可预测的算法或系统。我能想象的唯一适合这个的系统是复杂的系统,比如天气或一般的自然,因为对于那些我们现在没有任何具体的算法,但是 Junit? 有人可以解释 Junit 文档指的是什么吗?

谢谢,标记

最佳答案

它的全部意思是该算法定义明确,但它取决于太多复杂的、不可控的因素,您作为开发人员无法有效地预测或依赖顺序。

根据 java.lang.Class 的文档,JVM 可以自由地以任何顺序从 getMethods() 方法返回方法。因此,首先要注意的是,底层算法可能会在 JVM 版本/实现之间发生变化。

方法在类文件中的布局顺序在 JLS 中没有严格定义,因此由不同编译器编译的同一个类最终可能会得到略有不同的方法顺序,同一个 JVM 可能会返回不同的方法顺序,即使该类在其他方面是相同的。

在 JVM 中,类信息的存储方式可能无法保证返回一致的顺序,甚至可能取决于 JVM 在其生命周期中所处的位置。例如,假设每个方法都存储为一个 java.lang.Method 对象,而 java.lang.Class 将它们全部存储在一个 Set 中>,getMethods() 的顺序取决于 Set 中对象的顺序 - 由于散列,本质上是随机的(或伪随机的)。

尽管 JVM 的工作方式并不完全相同,但它确实使用了依赖于实现的数据结构,这使得难以预测方法的返回顺序,例如 java.lang.Class.getMethods() 和不可能保证 JVM 实现和/或版本之间的一致性。因此,如果您查看 java.lang.Class 的 OpenJDK 实现,您会发现 getMethods() 方法是根据许多 native 方法实现的。一旦您使用 native 代码,您将依赖于非常特定于实现的因素,例如内存地址,并且正如文档所暗示的那样,JVM 不会确保它们的影响对您完全隐藏。

关于java - JUnit执行顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41700914/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com