Ich habe eine Schwierigkeit Zeit verspotten ein privates statische letzte String-Feld in einer Klasse. Hier ist mein Java-Beispielcode:Mock private statische final String mit Mockito
public class Fruit {
private static final String FRUIT = "apple";
public void getFruit() {
System.out.println("I like " + FRUIT);
}
}
Und ich verwenden Mockito die FRUIT Variable zu verspotten, so dass ich den Wert der FRUIT von "apple" ändern zu "Mango". Denn das hier ist mein Test:
public class FruitTest {
@Test
public void testFruit() throws NoSuchFieldException, SecurityException, Exception {
setFinalStatic(Fruit.class.getDeclaredField("FRUIT"), "mango");
Fruit fruit = new Fruit();
fruit.getFruit();
}
static void setFinalStatic(Field field, Object newValue) throws Exception {
field.setAccessible(true);
Field modifiersField = Field.class.getDeclaredField("modifiers");
modifiersField.setAccessible(true);
modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
field.set(null, newValue);
}
}
ich erwartet hatte, als ich System.out.println("I like " + FRUIT);
tun es Mango drucken, aber noch ist es Apfeldruck. Ich würde wirklich schätzen, wenn jemand mir mit diesem ONLY USING MOCKITO und nicht PowerMock usw. helfen kann.
Das Verhalten der 'Fruit' Klasse wird sein, immer' apple' zurückzugeben. Deshalb denke ich nicht, dass Sie das ändern sollten. Wenn Sie die Möglichkeit haben möchten, eine variable Fruchtart zurückzugeben, dann machen Sie nicht das Feld 'static final' und verwenden Sie' when() ', um das gewünschte Verhalten nachzuahmen. –