web-dev-qa-db-ja.com

PowerMockアクセスのプライベートメンバー

読んだ後: https://code.google.com/p/powermock/wiki/BypassEncapsulation 気づいたのですが、わかりません。

この例を見てください:

public class Bar{
   private Foo foo;

   public void initFoo(){
       foo = new Foo();
   }
}

PowerMockを使用してプライベートメンバーfooにアクセスするにはどうすればよいですか(たとえば、fooがnullでないことを確認するには)?

注:
不要なのは、追加のgetmethodsを使用してコードを変更することです。

編集:
解決策がリンクされたページのサンプルコードブ​​ロックを見逃していることに気付きました。

ソリューション:

 Whitebox.getInternalState(bar, "foo");
14
Gobliins

これは、次のテストクラスを書くのと同じくらい簡単なはずです。

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)));
    }
}

正しい(静的)インポートの追加は、読者への課題として残されています:)。

21
mthmulders