我有 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 实现?
@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(){
}
}