2016-09-19 60 views
0

我的目標:在測試中僅運行ValidatorOne。如何使用Javax約束驗證器運行一個具體驗證

經驗證類:

@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())); 
    } 

當我運行測試同時運行validato RS。

我試圖使用「組」註釋屬性,但它不適用於加入的驗證器。

注意:我不想在MyClass上使用兩個驗證器批註 - 它看起來不像Agregation批註ValidMyClass那樣乾淨。

你知道我的問題anu解決方案嗎?

回答

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的所有其他驗證。