Java 有没有办法重新初始化静态类?

2023-12-21

我正在尝试对引用另一个类的静态数据的类进行单元测试。我不能“不”使用这个静态类,但显然运行多个测试已经成为问题。所以我的问题是这样的。 junit 测试中有没有办法重新初始化静态类?这样一来,一次测试就不会受到前一次测试的影响?

换句话说,有一些方法可以做到这一点:

Foo.setBar("Hello");

// Somehow reinitialize Foo

String bar = Foo.getBar(); // Gets default value of bar rather than "Hello"

不幸的是,我无法更改 Foo,所以我只能使用它。

Edit看来我的例子有点太简单了。在实际代码中,“Bar”由系统属性设置并设置为内部静态变量。所以一旦它开始运行,我就无法更改它。


虽然有点脏,但我通过使用反射解决了这个问题。我没有重新运行静态初始化程序(这会很好),而是采用了脆弱的方法并创建了一个实用程序,可以将字段设置回已知值。这是有关如何设置静态字段的示例。

final Field field = clazz.getDeclaredField(fieldName);
field.setAccessible(true);
final Field modifiersField = Field.class.getDeclaredField("modifiers");
modifiersField.setAccessible(true);
modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);

field.set(null, value);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 有没有办法重新初始化静态类? 的相关文章

随机推荐