Ich habe einen REST-Service mit Jersey & Spring-Boot geschrieben. Ich habe benutzerdefinierte Validator-Klassen für POST-Parameter geschrieben. Ich möchte das gleiche tun. Ich konnte nicht herausfinden, wie es geht. Mein Validator sieht aus wie folgt:Jersey benutzerdefinierte Validatoren unittest
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = ValidTaskForCreate.Validator.class)
public @interface ValidTaskForCreate {
String message() default "Invalid Request to create a Task";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
public class Validator implements ConstraintValidator<ValidTaskForCreate, Task> {
@Override
public void initialize(ValidTaskForCreate constraintAnnotation) {
}
@Override
public boolean isValid(final Task task, ConstraintValidatorContext context) {
context.disableDefaultConstraintViolation();
if(task.getName() == null || task.getName().isEmpty()) {
context.buildConstraintViolationWithTemplate("Task name should be specified").addConstraintViolation();
return false;
}
if(task.getTaskType() == null) {
context.buildConstraintViolationWithTemplate("Specify a valid TaskType in the range of [1..3]").addConstraintViolation();
return false;
}
return true;
}
}
}
Jetzt möchte ich die isValid() Funktion testen, indem verschiedene Aufgaben Objekte übergeben. Ich bin mir nicht sicher, wie ich diese Methode jetzt nennen soll. ich Instanz Validator Klasse wie folgt erstellen,
ValidTaskForCreate.Validator taskValidator = null;
taskValidator = new ValidTaskForCreate.Validator();
nennen isValid(), kann ich taskValidator.isValid (verwenden). Aber ich kann nicht das ConstraintValidatorContext-Objekt als zweiten Parameter übergeben.
Oder gibt es einen Weg zu UnitTest benutzerdefinierten Validierungsklassen wie diesem?