In Java können Sie eine Funktion namens Reflection verwenden, um die Sichtbarkeit zu manipulieren, um den Wert eines privaten Felds abzurufen oder auf eine private Methode zuzugreifen.
PowerMock bietet diese Funktionen in der WhiteBox-Klasse. (Reflexion wird intern verwendet.)
SampleEm.java
public class SampleEm {
private String field = null;
public SampleEm(String filed) {
this.setField(filed);
}
public String getField() {
return field;
}
private void setField(String filed) {
this.field = filed;
}
}
getInternalState (Instanz, Feldname Zeichenfolge)
@Test
public void test_getInternalState() throws Exception {
//Vorbereitung
SampleEm em = new SampleEm("value");
//Holen Sie sich den Wert eines privaten Feldes
String field = Whitebox.getInternalState(em, "field");
}
setInternalState (Instanz, Feldname Zeichenfolge, Set-Wert)
@Test
public void test_setInternalState() throws Exception {
//Vorbereitung
SampleEm em = new SampleEm("value");
//Legen Sie im privaten Feld einen Wert fest
Whitebox.setInternalState(em, "field", "newValue");
}
invokeMethod (Instanz, Methodenname Zeichenfolge, Argument, ...)
@Test
public void test_invokeMethod() throws Exception {
//Vorbereitung
SampleEm em = new SampleEm("value");
//Rufen Sie eine private Methode auf
Whitebox.invokeMethod(em, "setField", "newValue");
}
Verschiedene andere Methoden werden bereitgestellt.
Sie können Ihren eigenen Code verwenden, um mithilfe von Reflection auf private Felder / Methoden zuzugreifen. Ich denke jedoch, dass der Vorteil der Verwendung von Whitebox darin besteht, dass Sie Ihren Testcode einfach halten können.
Recommended Posts