Должен ли Spring-Boot-Test @MockBeans соответствовать условиям @ConditionalOnBean?

У меня есть ява @Configuration класс с FOO @Bean с пометкой @ConditionalOnBean(BAR.class). Поскольку я ожидаю, что этот bean-компонент будет предоставлен или не предоставлен проектом импорта, его нет нигде в моем проекте.

В моем интеграционном тесте я издеваюсь Bar.class посредством @MockBeans, Но по какой-то причине Spring-Boot -debug сообщает, что не нашел его, поэтому мой условный компонент не был загружен.

Я почти уверен, что эта ситуация работала должным образом в прошлом, но я настраивал что-нибудь дополнительное? Я не могу заставить это работать

PS> Я обнаружил, что ручная перерегистрация @Bean в той же @Configuration, что и условная, тоже не видит! Есть ли известная ошибка, связанная с его?

Автоответчик: виновник в этом случае

Вы должны быть очень осторожны с порядком добавления определений бина, поскольку эти условия оцениваются на основе того, что было обработано до сих пор. По этой причине мы рекомендуем использовать только аннотации @ConditionalOnBean и @ConditionalOnMissingBean в классах автоконфигурации (поскольку они гарантированно загружаются после добавления любых определенных пользователем определений компонентов).

P.S2> Я понял, что Bar.class - это интерфейс, но я не понимаю, почему он не должен работать, пока присутствует реализация

P.S3> Я обнаружил, что MockitoTestExecutionListener выполняется после класса OnBeanCondition. Это кажется моей проблемой полностью.

1 ответ

Решение
Другие вопросы по тегам