如何使用jmockit模拟public void方法?

时间:2014-06-09 02:05:58

标签: java spring unit-testing junit jmockit

我正在尝试为我的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

}

现在SomeOtherClassprocessTask方法就是这样 -

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进行模拟来运行吗?

这可能吗?

1 个答案:

答案 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");
    }
};

只需在单元测试开始时将其添加到模拟上方。