Я пытался следовать инструкциям в статье ниже, пытаясь реализовать простую аннотацию, чтобы проверить, была ли строка определенной длины в качестве теста. Моя цель состояла в том, чтобы эта аннотация генерировала исключение во время выполнения, если строка не удовлетворяет определенным условиям.
https://dzone.com/articles/create-your-own-constraint-with-bean-validation-20
Я могу добавить аннотацию к коду, и все отлично компилируется и собирается. Однако, независимо от того, что я делаю, когда пытаюсь вызвать его из модульного теста, я не могу запустить проверку. Я чувствую, что упускаю что-то очевидное, но я не знаю, что это такое. Обратите внимание, что это серверная служба Java SE, поэтому нет компонента пользовательского интерфейса. Давайте рассмотрим пример (который, я знаю, уже существует, для проверки, является ли строка пустой или нулевой)
Вот интерфейс:
@Documented
@Constraint(validatedBy = {NotEmptyValidator.class})
@Target({METHOD, FIELD, CONSTRUCTOR, PARAMETER})
@Retention(RUNTIME)
public @interface NotEmpty {
Class<?>[] groups() default {};
String message() default "test message";
Class<? extends Payload>[] payload() default {};
}
Вот валидатор:
public class NotEmptyValidator implements ConstraintValidator<NotEmpty, String> {
@Override
public void initialize(final NotEmpty notEmpty) {
}
@Override
public boolean isValid(String notEmptyField, ConstraintValidatorContext constraintValidatorContext) {
return !Strings.isNullOrEmpty(notEmptyField);
}
}
Обратите внимание, что для хранения задано значение RUNTIME, но на самом деле оно не проверяется, когда я запускаю модульный тест для параметра String, который является пустой строкой. Как на самом деле включить эту проверку и запустить ее?
например, если у меня есть метод случайной полезности
public static String testAnnotation(@NotEmpty final String foo) {
return foo + "bar"
}
Если я вызываю это из модульного теста, даже если строка пуста или пуста, проверка не запускается. Любая помощь будет оценена!