Ответ 1
Есть ли что-то вроде насмешки над переменной? Я бы назвал это повторно назначением. Я не думаю, что 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
Не забывайте reset поле к его исходному значению при срыве.