【发布时间】:2014-06-09 02:05:58
【问题描述】:
我正在尝试为我的 Spring MVC 控制器编写一些 junit 测试,到目前为止我能够成功地做到这一点。我也在使用 Spring Mock 和 jmockit。
下面是我在DataController控制器中的方法——
@RequestMapping(value = "processWork", method = RequestMethod.GET)
public @ResponseBody
DataResponse processWork(@RequestParam("conf") final String value, @RequestParam("dc") final String dc) {
// .. some code here
SomeOtherClass modifier = new SomeOtherClass(zookClient);
List<Map<String, String>> mappings = getMappings(dc);
modifier.processTask(value, mappings);
// .. some code here
}
现在在SomeOtherClass,processTask方法是这样的——
public void processTask(String value, List<Map<String, String>> mappings) throws Exception {
// some code here
}
下面是我为DataController 类中的processWork 方法编写的junit 测试。
private MockMvc mockMvc;
@Test
public void test03_processWork() throws Exception {
mockMvc.perform(
get("/processWork").param("conf", "shsysysys").param("dc", "eux")).andDo(print()).andExpect(status().isOk());
}
问题陈述:-
现在的问题是,每当我运行test03_processWork 单元测试时,它会进入我的控制器的processWork 方法(这很好),然后它调用我的SomeOtherClass 的processTask 方法,然后是我想要避免的。
意思是,有什么办法,我可以模拟SomeOtherClass 的processTask 方法以返回一些默认值,而不是运行实际代码processTask 方法中有什么?
目前在我的 junit 测试运行中,它也在调用 SomeOtherClass 的 processTask 方法,processTask 中的代码也在运行,这就是我想要避免的。我不希望 processTask 中的任何代码通过使用 jmockit 进行模拟来运行?
这可能吗?
【问题讨论】:
-
投反对票的人,想解释一下有什么问题吗?如果我有任何错误,我很乐意改进我的问题。我还在学习 mocking 的东西。
-
请参阅 jmockit.googlecode.com/svn/trunk/www/tutorial/AnExample.html 上的 MockUp 示例
标签: java spring unit-testing junit jmockit