powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Как в тесте правильно заполнить мапу бинами?
4 сообщений из 4, страница 1 из 1
Как в тесте правильно заполнить мапу бинами?
    #40053456
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем! Насмотрелся тут видосиков Борисова, ну и запилил тестовый проект, заменил switch case на мапу, куда складывают сервисы с ключами в виде енама определенного в сервисе(В имплементациях сервиса, если быть конкретнее.)
Всё отлично работает. Пока не решил написать тест :)
Мапа не заполняется.
Сделал в классе ExportServiceFactoryTest.java
[строка 24] @Import({ExportServiceLevelOne.class, ExportServiceLevelTwo.class, ExportServiceLevelThee.class})
Всё заработало, но это как-то бредово - все классы тут перечислять.

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

Написал регистрар с дженериками, а теперь вопрос, который призван решить не совсем адекватную проблему:
Как в @Import(MyImportBeanDefinitionRegistrar.class) передать тип интерфейса по которому буду собираться и регистрироваться имплементирующие его классы?

Может есть вообще другой подход, тестировать эту замену switch case на мапу?
Ссылка сразу на тест-класс: https://github.com/Nixic/nixic/blob/main/src/test/java/ru/nixic/service/ExportServiceFactoryTest.java
Можете развернуть проект у себя, если интересно. Регистрар добавлю, если проявиться интерес и если это вообще правильный подход.
...
Рейтинг: 0 / 0
Как в тесте правильно заполнить мапу бинами?
    #40053569
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nixic,

Дык всё правильно.
Вы же указали, что нужно создать контекст по конкретному конфигу.
А, то что надо шерстить по всему classpath не указали.

Тут есть 3 способа
1) Указать что нужно шерстить по всему classpath
2) Создать конфиг-класс, в котором будут указаны все нужные бины и загрузить его (Import).
3) Поднимать весь контекст (там автоматом сканируется весь classpath)
...
Рейтинг: 0 / 0
Как в тесте правильно заполнить мапу бинами?
    #40053826
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо.
В итоге я переделал немного, но только в рабочем проекте, позже залью в тестовый на гитхаб.

Сделал тестовый класс конфигурации(ApplicationTestConfig) в пакете тестов, в котором так же бин с мапой, по сути копия основной конфы, но без лишних бинов.
В эту же тестовую конфигурацию импортнул регистрар с конкретно указанным типом интерфейса (тоже лежит в тестовом пакете)
@Import(MyImportBeanDefinitionRegistrar.class)

Указал конфигурацию контекста в классе теста.
т.е. @ContextConfiguration(classes = {ApplicationTestConfig.class})

Ну и всё, более менее уже хорошо, и проект работает и тесты проходят.
...
Рейтинг: 0 / 0
Как в тесте правильно заполнить мапу бинами?
    #40056802
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Влил в main ветку изменения, которые описал выше, может кому интересно будет.
Больше я решений не нашёл и меня "это" устроило.
п.с. Больше для себя сохранил, конечно :)
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Как в тесте правильно заполнить мапу бинами?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]