PowerMock访问私有成员

Gob*_*ins 14 java junit private mockito powermock

阅读后:https: //code.google.com/p/powermock/wiki/BypassEncapsulation 我意识到,我不明白.

请参阅此示例:

public class Bar{
   private Foo foo;

   public void initFoo(){
       foo = new Foo();
   }
}
Run Code Online (Sandbox Code Playgroud)

如何foo使用PowerMock 访问私有成员(例如,验证它foo不是null)?

注意:
我不想要的是使用额外的get方法修改代码.

编辑:
我意识到我错过了链接页面上的示例代码块与解决方案.

解:

 Whitebox.getInternalState(bar, "foo");
Run Code Online (Sandbox Code Playgroud)

mth*_*ers 20

这应该像编写以下测试类一样简单:

public class BarTest {
    @Test
    public void testFooIsInitializedProperly() throws Exception {
        // Arrange
        Bar bar = new Bar();

        // Act
        bar.initFoo();

        // Assert
        Foo foo = Whitebox.getInternalState(bar, "foo");
        assertThat(foo, is(notNull(Foo.class)));
    }
}
Run Code Online (Sandbox Code Playgroud)

添加正确(静态)导入留给读者:).

  • 私有静态栏练习答案: Foo foo = Whitebox.getInternalState(Bar.class, "foo"); 因为您可以直接通过类而不是实例获取静态字段:) (3认同)