Включение проверки метода Spring в тесте JUnit

#java #spring #bean-validation #spring-validator

#java #spring #bean-проверка #spring-валидатор

Вопрос:

Я следовал инструкциям в документации Spring 4.0.5 для настройки проверки компонентов в контейнере с помощью Hibernate Validator 5.1 и этого (Groovy) класса конфигурации:

 @Configuration("validationConfig")
@Import(CreatorConfig)
@ImportResource("/META-INF/spring/mockito-mocks.xml")
static class Config {
    @Bean
    validator() {
        new LocalValidatorFactoryBean()
    }

    @Bean
    mvpp() {
        new MethodValidationPostProcessor()
    }
}
 

Мой тестируемый класс создается в ссылочном CreatorConfig классе:

 @Configuration
@DependsOn("validationConfig")
static class CreatorConfig {
    @Bean
    ticketCreator(TicketRepository tickets) {
        new UploadTicketCreator(tickets)
    }
}
 

Я выделил это в отдельный класс конфигурации, полагая, что мне нужен зарегистрированный постпроцессор перед созданием UploadTicketCreator компонента, который аннотируется в соответствии с документацией:

 @Validated
public class UploadTicketCreator {
    public UploadTicket createTicket(@Valid CreateTicketRequest request) {
        // do stuff
    }
}
 

Затем я внедряю UploadTicketCreator его в тестовый пример. Я проверил, что автозапуск работает правильно (поле заполнено, а его собственное tickets поле является макетом Mockito). Однако логика проверки не применяется к моему компоненту creator, а введенный компонент является необработанным POJO без какого-либо прокси.

Я пропустил часть настройки проверки? Есть ли дополнительный требуемый шаг, не упомянутый в документации?

Комментарии:

1. Содержит ли журнал какую-либо информацию о том, что происходит с MethodValidationPostProcessor ?

Ответ №1:

Похоже, что процессор конфигурации Spring проверяет объявленный возвращаемый тип объявлений bean. Я использовал неявный возвращаемый тип Groovy, который, предположительно, был скомпилирован Object , и добавил явный возвращаемый тип MethodValidationPostProcessor или даже BeanPostProcessor вызвал применение рекомендаций по проверке.