Java 自定义约束验证器在单元测试中失败,并出现“未设置目标验证器”错误

问题描述 投票:0回答:1

我有 springboot 应用程序,它像这样连接 validatorFactoryBean

private LocalValidatorFactoryBean validatorFactoryBean;

@Autowired
public void setValidatorFactoryBean(LocalValidatorFactoryBean validatorFactoryBean) {
    this.validatorFactoryBean = validatorFactoryBean;
}

我在类 Car 上定义了自定义验证器,并且像这样运行验证。

 Set<ConstraintViolation<Car>> constraintViolations = validatorFactoryBean.validate(myCar);

所有这些都运行良好。但是当我尝试通过单元测试来测试这个时,在线

validatorFactoryBean.validate(myCar)

我收到错误“未设置目标验证器”。

这就是我在 testng 单元测试中设置 validatorFactoryBean 的方式

@InjectMocks
LocalValidatorFactoryBean validatorFactoryBean;

我通过调用 setValidatorFactoryBean setter 将其传递给我正在测试的类。

在调试时我意识到这个 validatorFactoryBean 不知道主代码中的所有 ConstraintValidator 实现。

如何让 validatorFactoryBean 了解所有 ConstraintValidator 实现?

java spring-boot mockito testng javax.validation
1个回答
0
投票

@InjectMocks
只是一个mockito的东西,从来不理解spring。就像您手动创建一个
LocalValidatorFactoryBean
一样,无需任何 spring 集成。

要正确配置

LocalValidatorFactoryBean
,您可以通过使用
@SpringBootTest
@ImportAutoConfiguration
来自动配置 Bean 验证内容。

@SpringBootTest
public class ValidationTest{


    @Configuration
    @ImportAutoConfiguration(ValidationAutoConfiguration.class)                
    @ComponentScan(basePackages = { "my.app.root.package" })
    public static class Config {

    }

    @Autowired
    LocalValidatorFactoryBean validatorFactoryBean;
    

    @Test
    void test(){
    
    }
    
}
© www.soinside.com 2019 - 2024. All rights reserved.