Sometimes you just need to update the value of a static private variable for junit testing. It often is a code smell if this is needed, in this case as well but it was not allowed to redesign the software. So we made a reflection utility class that can change the values:
public static void setStaticPrivateVariable(Class<?> objectClass,
String fieldName, Object value) throws Throwable {
Field field = objectClass.getDeclaredField(fieldName);
field.setAccessible(true);
Field modifiersField = Field.class.getDeclaredField("modifiers");
modifiersField.setAccessible(true);
int modifiers = modifiersField.getInt(field);
if (Modifier.isFinal(modifiers)) {
modifiers &= ~Modifier.FINAL;
modifiersField.setInt(field, modifiers);
}
field.set(null, value);
}
Leave a Comment
You must be logged in to post a comment.