Validation JSR303Bean验证单元测试与Mockito和Autowiring
我想junit测试我的验证器类,但我的验证器类有@autowired服务类。如何使用Mocikto注入这些依赖项 我将使用下面的代码行调用验证器Validation JSR303Bean验证单元测试与Mockito和Autowiring,validation,unit-testing,mockito,junit4,Validation,Unit Testing,Mockito,Junit4,我想junit测试我的验证器类,但我的验证器类有@autowired服务类。如何使用Mocikto注入这些依赖项 我将使用下面的代码行调用验证器 Set<ConstraintViolation<MyDomainPOJOObject>> constraintViolationsFromJavaRules = validator.validate(myDomainPOJOObject, Default.class); 为了实现这一点,我创建了自定义ConstraintVal
Set<ConstraintViolation<MyDomainPOJOObject>> constraintViolationsFromJavaRules = validator.validate(myDomainPOJOObject, Default.class);
为了实现这一点,我创建了自定义ConstraintValidator工厂来提供自定义ConstraintValidator 假设我们有以下情况:
@RunWith(MockitoJUnitRunner.class)
public class SomeValidationValidatorTest implements ConstraintValidatorFactory {
@Mock
private MyDependency myDependencyMock;
}
您必须从ConstraintValidatorFactory实现getInstance方法:
@Override
public <T extends ConstraintValidator<?, ?>> T getInstance(Class<T> key) {
if (key == SomeValidationValidator.class) {
return (T) new SomeValidationValidator(myDependencyMock);
}
throw new IllegalArgumentException("expecting SomeValidationValidator!");
}
@覆盖
public config=Validation.byDefaultProvider().configure();
config.constraintValidatorFactory(此);
ValidatorFactory=config.buildValidatorFactory();
validator=factory.getValidator();
}
最后,创建一些测试:
@Test
public void someTest1() {
// arrange
Bean bean = new Bean();
Mockito.when(myDependencyMock.isValid(null)).thenReturn(true);
// act
Set<ConstraintViolation<Bean>> constraintViolations = validator.validate(bean);
// assert
Assert.assertTrue(constraintViolations.isEmpty());
Mockito.verify(myDependencyMock).isValid(null);
}
@测试
public void someTest1(){
//安排
Bean=新Bean();
Mockito.when(myDependencyMock.isValid(null)).thenReturn(true);
//表演
Set constraintViolations=validator.validate(bean);
//断言
Assert.assertTrue(constraintViolations.isEmpty());
Mockito.verify(myDependencyMock).isValid(null);
}
上述解决方案并不完美,但我认为它提供了使用custom Constraint Validator Factory解决问题的想法。谢谢,只有此解决方案对我有所帮助
@Before
public void setUp() throws Exception {
// see https://docs.jboss.org/hibernate/validator/5.2/reference/en-US/html/chapter-bootstrapping.html#_constraintvalidatorfactory
Configuration<?> config = Validation.byDefaultProvider().configure();
config.constraintValidatorFactory(this);
ValidatorFactory factory = config.buildValidatorFactory();
validator = factory.getValidator();
}
@Test
public void someTest1() {
// arrange
Bean bean = new Bean();
Mockito.when(myDependencyMock.isValid(null)).thenReturn(true);
// act
Set<ConstraintViolation<Bean>> constraintViolations = validator.validate(bean);
// assert
Assert.assertTrue(constraintViolations.isEmpty());
Mockito.verify(myDependencyMock).isValid(null);
}