Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.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 JUnit-静态类是否维护测试类之间的状态?_Java_Junit - Fatal编程技术网

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“魔法”可以将静态重置为初始状态(不管您如何定义)。考虑实现它太复杂(也太可怕了)。

静态类是什么意思?本质上是一个包含静态成员变量和方法的类。此类用于保存整个应用程序的配置信息。