2015-01-19 12 views
9

Po przeczytaniu: https://code.google.com/p/powermock/wiki/BypassEncapsulation zdałem sobie sprawę, nie rozumiem.PowerMock dostęp prywatnych członków

Zobacz w tym przykładzie:

public class Bar{ 
    private Foo foo; 

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

Jak mogę uzyskać dostęp do prywatnego członek foo za pomocą PowerMock (na przykład w celu sprawdzenia, foo nie jest null)?

Uwaga:
Co nie chcę modyfikuje kod z dodatkowych get metod.

Edit:
zdałem sobie sprawę, że brakowało mi przykładowy blok kodu na stronie związanej z roztworem.

Rozwiązanie:

Whitebox.getInternalState(bar, "foo"); 
+0

Polecam uważnie przed napisaniem tego typu testu, argumentami przeciwko sprawdzaniu wartości zmiennej prywatnej podsumowanej tutaj: https://stackoverflow.com/questions/2981476/does-jmockit-have-any-drawbacks-at- all/7499979 # 7499979 – codebox

+0

Prawdziwy test jest nieco bardziej złożony i wymaga hibernacji, sesji i sesji, próbuję sprawdzić nasz interfejs dbInterface bez konieczności inicjowania kompletnych rzeczy hibernacji. W większości metod modyfikujemy stan obiektów i nie mamy rzeczywistej funkcjonalności wejścia/wyjścia. – Gobliins

Odpowiedz

15

To powinno być tak proste, jak pisanie następujące klasy badawczej:

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

Dodawanie prawo (statyczne) import pozostawiamy jako ćwiczenie dla czytelnika:).

+0

Tak, jakoś przeoczyłem przykład kodu na stronie. Twoja odpowiedź jest poprawna – Gobliins

+1

Podoba mi się komentarz "Ułóż, pozwól, potwierdzić". Używam "Setup, Test, Validate", ale lubię pierścień 3 As. – javaPlease42

+0

Rzeczywiście przełączyłem z S-T-V na A-A-A. Aliteracja rzeczywiście sprawia, że ​​brzmi to ładnie. Ale co najważniejsze (z jednym skrótem): pomaga to w ustrukturyzowaniu testu, przez co trudniej jest przypadkowo przetestować symulację zamiast SUT. Widziałem, jak to się stało - ze względu na mieszanie trzech faz. – mthmulders

Powiązane problemy