我有困难时间嘲笑类中私有静态最终字符串字段。这里是我的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()'来模拟你想要的行为。 –