我已按照 Spring 4.0.5 文档中的说明使用 Hibernate Validator 5.1 和此(Groovy)配置类在容器中配置 Bean 验证:
@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
bean 之前注册后处理器,该 bean 根据文档进行了注释:
@Validated
public class UploadTicketCreator {
public UploadTicket createTicket(@Valid CreateTicketRequest request) {
// do stuff
}
}
然后我将 UploadTicketCreator
注入(inject)到测试用例中。我已经验证 Autowiring 是否正常运行(该字段已填充,并且其自己的 tickets
字段是 Mockito 模拟)。但是,验证逻辑并未应用于我的创建者 bean,并且注入(inject)的 bean 是没有任何代理的原始 POJO。
我是否缺少验证设置的一部分?是否存在文档中未提及的额外必需步骤?
最佳答案
Spring 配置处理器似乎正在检查 bean 声明的声明返回类型。我使用的是 Groovy 的隐式返回类型,它可能被编译为 Object
,并添加 MethodValidationPostProcessor
的显式返回类型,甚至是 BeanPostProcessor
导致了验证需要应用的建议。
关于java - 在 JUnit 测试中启用 Spring 方法验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24386100/