Spring boot 使用带有@Inject for Spring boot应用程序的自定义jsr验证器测试失败

Spring boot 使用带有@Inject for Spring boot应用程序的自定义jsr验证器测试失败,spring-boot,junit4,bean-validation,jhipster,Spring Boot,Junit4,Bean Validation,Jhipster,版本 hibernate验证程序-5.1.3.Final 弹簧防尘套-1.2.5.1释放 spring上下文-4.1.7.1版本 最初的应用程序代码是使用jhipster生成的 相关控制器测试标有以下注释 @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = Application.class) @WebAppConfiguration @IntegrationTest 验证程序bea

版本

hibernate验证程序-5.1.3.Final 弹簧防尘套-1.2.5.1释放 spring上下文-4.1.7.1版本 最初的应用程序代码是使用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注释

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@WebAppConfiguration
@IntegrationTest
web应用程序使用MySQL作为数据库,而测试使用H2

如何将测试配置为使用SpringConstraintValidatorFactory

基于前面的问题和解决方案,我尝试了以下内容

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

将此添加到application.yml文件没有帮助。我猜这是为了进行hibernate保存/更新验证。在我的例子中,验证是在web层进行的

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


谢谢。

所以,在我的例子中,我已经编写了两个自定义验证器,它们需要自动连接。我在@Constraint注释中提供了validator类,如

@Constraint(validatedBy = MyCheckValidator.class)
我看到在标准验证器中,@NotNull等validatedBy被填充为空数组

在我的验证器中,我将validatedBy字段改为{},它开始工作。我不知道为什么

@Constraint(validatedBy = {})

如果有人能解释更详细的细节,我们将不胜感激。

请解释-ve投票。我想解决这个问题中的任何问题。谢谢