Cra*_*son 41 junit static mocking powermock
我很难找到设置类的静态字段的方法.它基本上是这样的:
public class Foo{
// ...
private static B b = null;
}
Run Code Online (Sandbox Code Playgroud)
其中B是另一个类.
有什么方法可以在PowerMock中执行此操作而不是使用setInternalStateFromContext()?使用上下文类方法对于设置一个字段似乎有点过分.
谢谢.
cpr*_*ger 94
Whitebox.setInternalState(Foo.class, b);
Run Code Online (Sandbox Code Playgroud)
只要你设置一个非null值,并且如果只有一个字段的类为B.如果您不能依赖奢侈品,则必须提供字段名称并将其null转换为您要设置的类型.在这种情况下,你需要写这样的东西:
Whitebox.setInternalState( Foo.class, "b", (B)null );
Run Code Online (Sandbox Code Playgroud)
Mar*_*iuk 18
试试这个:
@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));
Run Code Online (Sandbox Code Playgroud)
不适用于原语和原语包装器.
你只需这样做:
Whitebox.setInternalState(Foo.class, b);
Run Code Online (Sandbox Code Playgroud)
其中 b 是您要设置的 B 的实例。