Как обрабатывать пользовательскую проверку с помощью FixtureMonkey и плагина проверки Jakarta?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как обрабатывать пользовательскую проверку с помощью FixtureMonkey и плагина проверки Jakarta?

Сообщение Anonymous »

Я пытаюсь написать несколько тестов с помощью FixtureMonkey и столкнулся с проблемой. У моих DTO есть собственные валидаторы, и я использую JakartaValidationPlugin с FixtureMonkey.
Вот упрощенная версия моей тестовой настройки:< /strong>

Код: Выделить всё

@SpringBootTest
@DisplayName("User Service Tests")
class UserServiceTest {

private static final FixtureMonkey fixtureMonkey = FixtureMonkey.builder()
.objectIntrospector(FieldReflectionArbitraryIntrospector.INSTANCE)
.plugin(new JakartaValidationPlugin())
.defaultNotNull(true)
.build();

private static ResponseUserDto expectedResponseDto;
private static RequestUserDto expectedRequestDto;

@BeforeAll
static void setUp() {
expectedResponseDto = fixtureMonkey.giveMeOne(ResponseUserDto.class);
expectedRequestDto = fixtureMonkey.giveMeOne(RequestUserDto.class);
}
}

Проблема возникает из-за того, что некоторые из моих валидаторов зависят от репозитория логики проверки. Например, у меня есть собственный UniqueEmailValidator, например:

Код: Выделить всё

@Component
public class UniqueEmailValidator implements ConstraintValidator {

private final UserRepository userRepository;

@Autowired
public UniqueEmailValidator(final UserRepository userRepository) {
this.userRepository = userRepository;
}

@Override
public boolean isValid(final String email, final ConstraintValidatorContext context) {
if (email == null) {
return true;
}
return !userRepository.existsByEmail(email);
}
}

Когда я запускаю тесты, я получаю следующую ошибку:[/b]

Код: Выделить всё

HV000064: Unable to instantiate ConstraintValidator: my.awesome.package.validation.UniqueEmailValidator.
jakarta.validation.ValidationException: HV000064: Unable to instantiate ConstraintValidator: my.awesome.package.validation.UniqueEmailValidator.
at org.hibernate.validator.internal.util.privilegedactions.NewInstance.run(NewInstance.java:44)

my.awesome.package.validation.UniqueEmailValidator.()
java.lang.NoSuchMethodException: my.awesome.package.validation.UniqueEmailValidator.()

Что я уже узнал
Я понимаю, что эта ошибка возникает, потому что FixtureMonkey вызывает Jakarta Validation при создании DTO, а конструктору валидатора требуется UserRepository (через @Autowired), который не инициализируется в этом контексте.
Мой Цель
Я хочу отключить или обойти определенные проверки (например, UniqueEmailValidator) при создании данных с помощью FixtureMonkey. Я ищу лучший способ добиться этого, сохранив при этом остальную логику проверки нетронутой.
Каков рекомендуемый подход для решения этой ситуации? Должен ли я настроить FixtureMonkey, имитировать валидатор или есть другое решение?

Подробнее здесь: https://stackoverflow.com/questions/792 ... tionplugin
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»