bounty将在4天后过期。回答此问题有资格获得+150声望奖励。developer747希望引起更多关注此问题。
我有一个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并不知道主代码中的所有约束验证器实现。
如何让validatorFactoryBean知道所有的约束验证器实现?
2条答案
按热度按时间tct7dpnv1#
@InjectMocks
只是一个mockito的东西,永远不会理解spring。这就像你手动创建一个LocalValidatorFactoryBean
,而没有任何spring集成到它。要正确配置
LocalValidatorFactoryBean
,可以通过将@SpringBootTest
与@ImportAutoConfiguration
一起使用来自动配置bean验证。字符串
dtcbnfnu2#
我还建议你使用
@SpringBootTest
,就像Ken的回答中描述的那样。但是如果出于某种原因你不想这样做,只要所有的自定义约束验证器都有一个默认的,无参数的构造函数,使用下面的代码初始化的LocalValidatorFactoryBean
对象应该可以用于测试:字符串