Я пишу тестовый фреймворк Junit для тестирования веб-сервисов.
Требуется, чтобы входные значения поступали из разных источников, например, из более раннего вызова веб-службы или литералов в классе.
Для этого у меня есть конструкторы, которые по-разному принимают разные входные данные; пока все просто.
Проблема в том, что веб-сервисы также должны работать с полной загрузкой данных и обязательными полями только с полезной нагрузкой.
Вместо того, чтобы засорять (в некоторых случаях очень длинные) тесты с помощью операторов if
, решающих, устанавливать или не устанавливать значение, я написал аннотацию @ Необязательно.
Добавление этой аннотации приводит к ее обнулению с помощью следующего кода:
/**
* Find all of the fields annotated with optional and null them
* @throws IllegalAccessException
* @throws IllegalArgumentException
*/
private void blankOptionalFields() throws IllegalAccessException{
for(Field field: this.getClass().getDeclaredFields()){
Annotation optionalAnnotation = field.getAnnotation(Optional.class);
if(!(field.isSynthetic()) && optionalAnnotation instanceof Optional){
field.setAccessible(true);
try{
field.set(this, null);
}
catch(IllegalArgumentException e){
logger.debug("Tried to set a scalar field to null!", e);
}
}
}
}
Итак, две вещи:
1: Несмотря на то, что это работает, оно почему-то кажется хрупким / опасным, должен ли быть лучший подход?
2: Если это не простой подход, каков наилучший способ настройки скалярных значений для сопоставления значений?