|
Как в тесте правильно заполнить мапу бинами?
|
|||
---|---|---|---|
#18+
Привет всем! Насмотрелся тут видосиков Борисова, ну и запилил тестовый проект, заменил 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 Можете развернуть проект у себя, если интересно. Регистрар добавлю, если проявиться интерес и если это вообще правильный подход. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2021, 10:31 |
|
Как в тесте правильно заполнить мапу бинами?
|
|||
---|---|---|---|
#18+
Nixic, Дык всё правильно. Вы же указали, что нужно создать контекст по конкретному конфигу. А, то что надо шерстить по всему classpath не указали. Тут есть 3 способа 1) Указать что нужно шерстить по всему classpath 2) Создать конфиг-класс, в котором будут указаны все нужные бины и загрузить его (Import). 3) Поднимать весь контекст (там автоматом сканируется весь classpath) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2021, 13:39 |
|
Как в тесте правильно заполнить мапу бинами?
|
|||
---|---|---|---|
#18+
Спасибо. В итоге я переделал немного, но только в рабочем проекте, позже залью в тестовый на гитхаб. Сделал тестовый класс конфигурации(ApplicationTestConfig) в пакете тестов, в котором так же бин с мапой, по сути копия основной конфы, но без лишних бинов. В эту же тестовую конфигурацию импортнул регистрар с конкретно указанным типом интерфейса (тоже лежит в тестовом пакете) @Import(MyImportBeanDefinitionRegistrar.class) Указал конфигурацию контекста в классе теста. т.е. @ContextConfiguration(classes = {ApplicationTestConfig.class}) Ну и всё, более менее уже хорошо, и проект работает и тесты проходят. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2021, 21:17 |
|
|
start [/forum/topic.php?fid=59&msg=40053826&tid=2120498]: |
0ms |
get settings: |
19ms |
get forum list: |
6ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
27ms |
get topic data: |
2ms |
get forum data: |
1ms |
get page messages: |
97ms |
get tp. blocked users: |
1ms |
others: | 276ms |
total: | 431ms |
0 / 0 |