У меня возникло затруднительное время, издеваясь над приватным статическим финальным строковым полем в классе. Вот мой Java пример кода:Mock private static final String using Mockito
public class Fruit {
private static final String FRUIT = "apple";
public void getFruit() {
System.out.println("I like " + FRUIT);
}
}
И я Mockito издеваться переменную ФРУКТЫ, так что я могу изменить значение ФРУКТЫ от «яблока» в «манго». Для этого вот мой тест:
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);
}
}
я ожидал, когда я System.out.println("I like " + FRUIT);
он будет печатать манго, но все же печатает яблоко. Я был бы очень признателен, если кто-нибудь сможет мне помочь с этим ТОЛЬКО ИСПОЛЬЗОВАТЬ MOCKITO, а не PowerMock и т. Д.
Поведение класса «Фрукт» будет всегда возвращать «яблоко». Поэтому я не думаю, что вы должны изменить это. Если вы хотите, чтобы возвращали переменный тип фруктов, не делайте поле 'static final' и используйте' when() ', чтобы высмеять нужное поведение. –