私は、クラス内のプライベート静的最終文字列フィールドを嘲笑するのが困難です。ここに私のJavaのサンプルコードです:Mockプライベート静的最終文字列Mockitoを使用して
public class Fruit {
private static final String FRUIT = "apple";
public void getFruit() {
System.out.println("I like " + FRUIT);
}
}
そして、私は「りんご」の「マンゴー」からFRUITの値を変更することができるように、私は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() 'を使って必要な振る舞いを模倣してください。 –