如何使用Javax Constraint Validator运行一个具体验证

时间:2016-09-19 13:34:42

标签: java spring validation

我的目标:在测试中仅运行ValidatorOne。

验证类:

@ValidMyClass
public class MyClass{...}

主要验证者(Agregation注释):

@TypeValidation
@ValidatorOne
@ValidatorTwo
@Constraint(validatedBy = {})
public @interface ValidMyClass {...}

ValidatorOne测试:

private final Validator validator = Validation.buildDefaultValidatorFactory().getValidator();

@Test
public void validate_with_validatorOne() {
    MyClass myClass = new MyClass();

    assertIsValid(myClass);
}

private void assertIsValid(Object o) {
        Set<ConstraintViolation<Object>> violations = validator.validate(o, Default.class);
        assertThat(violations, is(empty()));
    }

当我运行测试时,它会运行两个验证器。

我尝试使用“groups”注释属性,但它不适用于agregated验证器。

注意:我不想在MyClass上使用两个验证器注释 - 它看起来不像agregation注释那样干净ValidMyClass。

你知道我问题的解决方案吗?

1 个答案:

答案 0 :(得分:0)

我以简单的验证测试结束,如下所示:

@Test
public void simpleTest(){
    ValidatorOneValidator validator = new ValidatorOneValidator(); //Class response for validation in ValidatorOne
    MyClass myClass = givenAValidMyClass(); //Some fixture

    validator.initialize(myClass.getClass().getAnnotation(ValidMyClass.class).annotationType().getAnnotation(ValidatorOne.class));

    assertTrue(validator.isValid(myClass, null));
}

这是我只测试一个验证器而不调用附加到MyClass的所有其他验证器的方法。