Вот упрощенная версия моей тестовой настройки:< /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);
}
}
Код: Выделить всё
@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);
}
}
Код: Выделить всё
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
Мобильная версия