我正在尝试为我的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
}
以下是我在processWork
课程中为DataController
方法编写的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
方法(这很好),然后调用processTask
方法我的SomeOtherClass
,这就是我想要避免的。
意思是,有什么办法,我可以模拟processTask
SomeOtherClass
方法返回一些默认值,而不是运行processTask
方法中的实际代码吗?
目前,在我的junit测试运行时,它还调用processTask
的{{1}}方法,SomeOtherClass
内的代码也在运行,这就是我想要避免的。我不希望processTask
中的任何代码通过使用jmockit进行模拟来运行吗?
这可能吗?
答案 0 :(得分:1)
您可以使用JMockit来模拟public void
方法,如下所示:
new MockUp<SomeOtherClass>() {
@Mock
public void processTask(String value, List<Map<String, String>> mappings) throws Exception {
System.out.println("Hello World");
}
};
只需在单元测试开始时将其添加到模拟上方。