PowerMocktesting – 设置类的静态字段

我很难find一种方法来设置一个类的静态字段。 基本上是这样的:

public class Foo{ // ... private static B b = null; } 

B是另一类。

除了setInternalStateFromContext()之外,还有什么办法可以在PowerMock中做到这一点吗? 使用上下文类方法似乎有点矫枉过正设置一个领域。

谢谢。

 Whitebox.setInternalState(Foo.class, b); 

只要你设置一个非空值, 并且只有一个字段为B类,就可以工作。 如果你不能依靠这种奢侈,你必须提供字段名称,并将null转换为您要设置的types。 在这种情况下,你需要写这样的东西:

  Whitebox.setInternalState( Foo.class, "b", (B)null ); 

尝试这个:

 @RunWith(PowerMockRunner.class) @PrepareForTest({Foo.class}) public class FooTest { @Test public void shouldMockPrivateStaticField() throws IllegalAccessException { // given Foo foo = new Foo(); Field field = PowerMockito.field(Foo.class, "b"); field.set(Foo.class, mock(B.class)); 

不要为基元和原语包装工作。

你只需要做:

 Whitebox.setInternalState(Foo.class, b); 

其中b是您想要设置的B的实例。

您可以使用getAllStaticFields并尝试设置它们

例:

 YourFieldClass newValue; final Set<Field> fields = Whitebox.getAllStaticFields(YourClass.class); for (final Field field : fields) { if (YourFieldClass.class.equals(field.getType())) { // or check by field name field.setAccessible(true); field.set(YourClass.class, newValue); } }