Ho un "AllowedValuesValidator.java" class:Come testare un validatore che implementa ConstraintValidator in java?
public class AllowedValuesValidator implements ConstraintValidator<AllowedValues, String> {
String[] values;
String defaultValue;
@Override
public void initialize(AllowedValues constraintAnnotation) {
values = constraintAnnotation.allowedValues();
defaultValue = constraintAnnotation.defaultValue();
}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
if (!StringUtils.isEmpty(defaultValue) && StringUtils.isEmpty(value)) {
value = defaultValue;
}
if (!StringUtils.isEmpty(value) && !Arrays.asList(values).contains(value)) {
return false;
}
return true;
}
}
E la classe corrispondente interfaccia:
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = AllowedValuesValidator.class)
public @interface AllowedValues {
String message();
String fieldName();
int fieldNumber();
String[] allowedValues() default {"Y", "N"};
String defaultValue() default "";
}
voglio essere in grado di scrivere una classe unit test per verificare la logica diretta in quel validatore. Ma sembra che la maggior parte dei luoghi Googled forniscono esempi di classi di test dove abbiamo praticamente testare tutti i validatori per una data classe modello, ad esempio:
@BeforeClass
public static void setup() {
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
validator = factory.getValidator();
}
@Test
public void testEmailExistsIncorrect() {
Set<constraintviolation<usercredentialsdto>> violations = validator
.validate(credentials, UserCredentialsDto.class);
Assert.assertEquals(1, violations.size());
}
Non voglio costruire modelli finte per testare tutti i validatori. Esiste un modo per creare una classe di test separata per testare la logica in un singolo validatore direttamente senza utilizzare altre classi di modelli ecc.?
In realtà mi sono creato una piccola classe di simulazione all'interno della classe di test e la convalida delle proprietà in quella classe sembra essere abbastanza semplice, quindi funzionerà bene per me. – goe