Java JUnit-静态类是否维护测试类之间的状态?
我有一个单元测试类,单独运行时通过。当我将它与包中的所有其他测试一起运行时,它失败了,失败的原因是一个独立的静态类尚未初始化。这个独立的静态类被其他类使用,因此它的状态似乎是在测试之间保持的 我的观察是正确的还是发生了其他事情?另外,如果有人能提供一个链接或其他参考资料也会很好 谢谢 方法没有状态(当然,在给定方法运行时除外),因此调用之间不会保存任何状态,即使对于Java JUnit-静态类是否维护测试类之间的状态?,java,junit,Java,Junit,我有一个单元测试类,单独运行时通过。当我将它与包中的所有其他测试一起运行时,它失败了,失败的原因是一个独立的静态类尚未初始化。这个独立的静态类被其他类使用,因此它的状态似乎是在测试之间保持的 我的观察是正确的还是发生了其他事情?另外,如果有人能提供一个链接或其他参考资料也会很好 谢谢 方法没有状态(当然,在给定方法运行时除外),因此调用之间不会保存任何状态,即使对于static方法也是如此 任何static字段都会在JVM执行期间保存其状态(当然,除非代码更改其值)。JUnit的所有测试都使用一
static
方法也是如此
任何static
字段都会在JVM执行期间保存其状态(当然,除非代码更改其值)。JUnit的所有测试都使用一个JVM,因此,是的,static
字段在测试之间保存状态
这是人们建议不要在可能避免的地方使用静态
字段的最大原因之一:它减少了您必须担心的全局状态的数量,从而使您更容易对测试进行推理
这个独立的静态类被其他类使用,因此它的状态似乎是在测试之间保持的
对。这就是将要发生的事情。这只是静力学令人尴尬的原因之一
静态字段存在于定义它们的类的生命周期中,这通常意味着JVM的生命周期。我试图在JLS中找到一个明确说明这一点的地方。我能找到的最接近的答案是:
“如果一个字段被声明为静态字段,则无论最终创建了多少个类实例(可能为零),该字段只存在一个具体化。静态字段,有时称为类变量,在初始化该类时具体化(§12.4)。”
在其他地方,JLS说一个类只初始化一次
例外情况是类被卸载,但在这里不会发生这种情况。或者至少,不使用正常/默认的JUnit框架行为。(但这是可以做到的:见)
如果您担心的话,没有任何JUnit“魔法”可以将静态重置为初始状态(不管您如何定义)。考虑实现它太复杂(也太可怕了)。静态类是什么意思?本质上是一个包含静态成员变量和方法的类。此类用于保存整个应用程序的配置信息。