2015-01-19 18 views
9

Nach dem Lesen: https://code.google.com/p/powermock/wiki/BypassEncapsulation ich erkannte, ich verstehe es nicht.PowerMock Zugriff private Mitglieder

Siehe in diesem Beispiel:

public class Bar{ 
    private Foo foo; 

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

Wie kann ich die privaten Member Zugang foo von PowerMock (zum Beispiel, um zu überprüfen, dass foo nicht null ist)?

Hinweis:
Was ich will nicht, um den Code mit extra get Methoden zu ändern.

Edit:
Ich erkannte, dass ich einen Beispielcode Block auf der gelinkten Seite ggf. mit der Lösung verpasst.

Lösung:

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

Ich würde empfehlen, sorgfältig zu überlegen, bevor Sie diese Art von Test schreiben, Argumente gegen die Überprüfung der Wert der privaten Variable hier zusammengefasst: https://stackoverflow.com/questions/2981476/does-jmockit-have-any-drawbacks-at- all/7499979 # 7499979 – codebox

+0

Der echte Test ist ein bisschen komplexer und beinhaltet Hibernate, Session und Sessionfactory, ich versuche unser dbInterface zu überprüfen, ohne komplette Hibernate-Sachen initialisieren zu müssen. In den meisten Methoden modifizieren wir einen Objektstatus und haben keine echte Input/Output-Funktionalität. – Gobliins

Antwort

15

, die so einfach sein sollte, die folgende Testklasse wie das Schreiben:

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

Hinzufügen der rechten Seite (statisch) Importe als Übung dem Leser überlassen wird:).

+0

Ja, ich habe das Code-Beispiel auf der Seite irgendwie übersehen. Ihre Antwort ist korrekt – Gobliins

+1

Ich mag die "Anordnen, Act, Assert" Kommentare. Ich benutze "Setup, Test, Validate" aber wie der Ring der 3 As. – javaPlease42

+0

Ich wechselte tatsächlich von S-T-V zu A-A-A. Die Alliteration macht es tatsächlich gut. Aber am wichtigsten (mit beiden Abkürzungen): Es hilft Ihnen, Ihren Test zu strukturieren, was es schwieriger macht, Ihren Mock statt Ihres SUT versehentlich zu testen. Das habe ich gesehen - aufgrund der drei Phasen, die gemischt wurden. – mthmulders

Verwandte Themen