En Java, vous pouvez utiliser une fonctionnalité appelée réflexion pour manipuler la visibilité afin d'obtenir des valeurs pour les champs privés et accéder aux méthodes privées.
PowerMock fournit ces fonctionnalités dans la classe WhiteBox. (La réflexion est utilisée en interne.)
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 (instance, chaîne de nom de champ)
@Test
public void test_getInternalState() throws Exception {
//Préparation
SampleEm em = new SampleEm("value");
//Obtenez la valeur d'un champ privé
String field = Whitebox.getInternalState(em, "field");
}
setInternalState (instance, chaîne de nom de champ, valeur définie)
@Test
public void test_setInternalState() throws Exception {
//Préparation
SampleEm em = new SampleEm("value");
//Définissez une valeur dans le champ privé
Whitebox.setInternalState(em, "field", "newValue");
}
ʻInvokeMethod (instance, chaîne de nom de méthode, argument, ...) `
@Test
public void test_invokeMethod() throws Exception {
//Préparation
SampleEm em = new SampleEm("value");
//Appeler une méthode privée
Whitebox.invokeMethod(em, "setField", "newValue");
}
Diverses autres méthodes sont proposées.
Vous pouvez utiliser votre propre code pour accéder aux champs / méthodes privés en utilisant la réflexion, mais je pense que l'avantage d'utiliser Whitebox est que vous pouvez garder votre code de test simple.
Recommended Posts