使用带有@Inject for Spring启动应用程序的自定义jsr验证程序进行测试失败

时间:2015-08-31 05:45:30

标签: spring-boot junit4 bean-validation jhipster

版本

  1. hibernate-validator - 5.1.3.Final
  2. spring-boot - 1.2.5.RELEASE
  3. spring-context - 4.1.7.RELEASE
  4. 初始应用程序代码是使用jhipster生成的。

    相关的控制器测试标有以下注释。

    @RunWith(SpringJUnit4ClassRunner.class)
    @SpringApplicationConfiguration(classes = Application.class)
    @WebAppConfiguration
    @IntegrationTest
    

    验证程序bean未在测试模式下连线。看起来Web模式中使用的ConstraintFactory实现是o.s.v.b.SpringConstraintValidatorFactory,而在测试模式下,使用的实现是o.h.v.i.e.c.ConstraintValidatorFactoryImpl,它不处理@Inject注释。

    Web应用程序使用MySQL作为数据库,而测试使用H2。

    如何让测试配置为使用SpringConstraintValidatorFactory?

    我已根据以前的问题和解决方案尝试了以下内容。

    1. 这不是Hibernate在保存实体时进行的第二次验证。我通过分析调用堆栈来检查这一点。验证器正在从web层触发,并在rest方法上使用@Valid注释。

    2. 将此添加到application.yml文件没有帮助。我猜这是用于hibernate保存/更新验证。就我而言,在网络层进行验证。

    3.   

      spring.jpa.properties.javax.persistence.validation.mode =无

      感谢。

1 个答案:

答案 0 :(得分:0)

所以,在我的情况下,我写了几个需要自动装配的自定义验证器(遵循此https://docs.jboss.org/hibernate/validator/4.0.1/reference/en/html/validator-customconstraints.html)。我在@Constraint注释中提供了验证器类,如。

@Constraint(validatedBy = MyCheckValidator.class)

我在标准验证器中看到@NotNull等validatedBy被填充为空数组。

在我的验证器中,我将validatedBy字段更改为{}并且一切都开始工作了。我不知道为什么。

@Constraint(validatedBy = {})

如果有人能够解释更精细的细节,将不胜感激。