Есть ли что-то вроде насмешка переменная? Я бы назвал это переназначением. Я не думаю, что EasyMock или PowerMock дадут вам простой способ переназначить поле static final
(звучит как странный вариант использования).
Если вы хотите сделать это, вероятно, что-то не так с вашим дизайном: избегайте static final
(или более часто глобальные константы), если вы знаете, что переменная может иметь другое значение, даже для целей тестирования.
В любом случае, вы можете добиться этого, используя отражение (от: Используя отражение для изменения статического финала File.separatorChar для модульного тестирования? ):
static void setFinalStatic(Field field, Object newValue) throws Exception {
field.setAccessible(true);
// remove final modifier from field
Field modifiersField = Field.class.getDeclaredField("modifiers");
modifiersField.setAccessible(true);
modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
field.set(null, newValue);
}
Используйте его следующим образом:
setFinalStatic(MyClass.class.getField("myField"), "newValue"); // For a String
Не забудьте восстановить исходное значение поля при сносе.