我正在使用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,但无法弄清楚如何在我的控制器的mockMVC实例中注入一个service2的模拟。据我所知,模拟中的@InjectMocks只能注入一层深度而不是两层的模拟。
编辑:
我使用以下命令获取控制器的MockMVC实例
MockMvc controller;
controller = MockMvcBuilders.standaloneSetup(Controller);
答案 0 :(得分:0)
你不需要那个。
当您掌握需要完成的工作时,模拟search service
就足够了。
示例:
doReturn(...).when(searchService).doSearch(any());
在执行单元测试时,开发人员需要识别受测试系统并模拟/存根所有协作者。
因此,在这种情况下,您将为Controller和Search Service编写单独的单元测试。
另外,请阅读Martin Fowler撰写的this精彩文章 - Mocks Aren't Stubs。
答案 1 :(得分:0)