| 
 | 
| 
 
Как в тесте правильно заполнить мапу бинами? 
 | 
|||
|---|---|---|---|
| 
 #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=40053456&tid=2120498]:  | 
    0ms | 
get settings:  | 
    10ms | 
get forum list:  | 
    14ms | 
check forum access:  | 
    4ms | 
check topic access:  | 
    4ms | 
track hit:  | 
    71ms | 
get topic data:  | 
    12ms | 
get forum data:  | 
    3ms | 
get page messages:  | 
    45ms | 
get tp. blocked users:  | 
    2ms | 
| others: | 17ms | 
| total: | 182ms | 

| 0 / 0 | 

    Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
    
    
    «На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
    
    
    ... ля, ля, ля ...