我正在使用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,如果有的话正在用于创建测试弹簧上下文。 –