#java #unit-testing #junit #interface #spring-boot-test
Вопрос:
Проблема : Во время тестирования Junit реализации интерфейса не отображаются автоматически в виде списка.
Ниже приведены фрагменты кода:
Интерфейс(TaskExectuors) имеет 2 реализации (Task1 и Task2). Эти задачи используются в другом классе обслуживания(TaskManager), где Список подключается автоматически.
Однако в тестовом классе Junit список интерфейсов всегда имеет значение 0, несмотря на то , что он помечен как @MockBean.
Есть какие-нибудь зацепки к тому, чего именно здесь не хватает ? В чем может быть причина того, что реализации интерфейса не подключаются автоматически как список при запуске junit ?
public interface TaskExecutors{ doProcess() } @Service class Task1 implenents TaskExecutors{ doProcess(){} } @Service class Task2 implenents TaskExecutors{ doProcess(){} } @Service class TaskManager { @Autowired Listlt;TaskExecutorsgt; taskExuecutorsList; void doSomeAction(){ taskExecutorsList.stream()..... } }
Тестовые примеры :
@SprintBootTest(classes={TaskManager.class,TaskExecutors.class}) class TaskManagerTest{ @Autowire TaskManager taskManager; @MockBean Listlt;TaskExecutorgt; taskExuecutorsList; @Test public void testTaskExecutorsListCount(){ assertNotNull(taskExuecutorsList); // pass assertEquals(2,taskExuecutorsList.size) // failed .. Expected 2 : Actual 0 } }
Обновления :
Похоже, модульное тестирование не загружает все необходимые объекты с автоматической проводкой, как ожидалось, с опциями SpringBoot(classes= {}).
Когда я удалил параметры классов (таким образом, перешел на уровень интегрированного тестирования), все компоненты были загружены, все работало так, как ожидалось. Также в моем коде требуется исправление, как показано ниже :
assertEquals(2,taskExuecutorsList.size) - Wrong Check and failed assertEquals(2,taskManager.getTaskExuecutorsList().size) - Passed