我有困難時間嘲笑類中私有靜態最終字符串字段。這裏是我的Java代碼示例:使用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等
'Fruit'類的行爲將總是返回'apple'。因此,我認爲你不應該改變這一點。如果你想要返回一個可變類型的水果,那麼不要將字段設置爲'static final',並使用'when()'來模擬你想要的行爲。 –