我正在使用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);
}
}
我需要測試的搜索方法爲控制器,但是服務2目前不活,因此調用它必須被嘲笑。我可以模擬service2,但無法弄清楚如何在控制器的mockMVC實例中注入一個service2模擬。就我所知,mockito中的@InjectMocks只注入了一個深度而不是兩個深度的嘲笑。
編輯:
我使用下列獲得控制器
MockMvc controller;
controller = MockMvcBuilders.standaloneSetup(Controller);
爲了模擬Service2,您需要訪問在單元測試期間創建的spring上下文。 可以通過多種方式訪問Spring上下文,可以自動裝入應用程序上下文,然後注入Service 2的模擬對象作爲自動裝配的主要候選對象,或者最好的方法是將其寫入Spring的xml,如果有的話正在用於創建測試彈簧上下文。 –