Я использую junit, mockito и mockMVC для проверки работы webapp. Я борюсь с зависимостью, инъекции которой я не могу понять. Моя структура webapp выглядит следующим образом.Глубокая инъекция вложенных зависимостей при тестировании
Class Controller{
@Autowired Service searchService;
@RequestMapping("Search")
public returnType search(@RequestParam("parameter")String parameter){
searchService.doSearch(parameter);
}
}
и класс обслуживания
Class Service{
@Autowired Service2 service2;
public returnType doSearch(String parameter){
//some code
service2.call(parameter);
}
}
мне нужно протестировать метод поиска для данного контроллера, однако service2 не в настоящее время живут и, следовательно, требует, чтобы он должен быть издевались. Я могу высмеять service2, но не могу понять, как ввести макет service2 в мой экземпляр mockMVC контроллера. Насколько я знаю, @InjectMocks в mockito только вводит mocks на один уровень в глубину, а не два.
EDIT:
Я использую следующие, чтобы получить MockMVC экземпляр контроллера
MockMvc controller;
controller = MockMvcBuilders.standaloneSetup(Controller);
Чтобы издеваться над Service2, вам нужно иметь доступ к контексту весны, который создается во время тестирования устройства. Существует несколько способов получить доступ к контексту весны, вы можете автосогласовать контекст приложения, а затем ввести издеваемый объект службы 2 в качестве основного кандидата для автопомощи, или лучший способ - записать его в xml, если у вас есть тот, который используется для создания тестового весеннего контекста. –