繁体   English   中英

如何使用jmockit模拟公共无效方法?

[英]How to mock public void method using jmockit?

我正在尝试为我的Spring MVC控制器编写一些junit测试,到目前为止,我已经能够成功完成它。 我也与jmockit一起使用Spring Mock。

下面是我在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

}

以下是我为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的代码也正在运行,这就是我要避免的事情。 我不希望使用jmockit通过模拟运行processTask存在的任何代码?

这可能吗?

您可以使用JMockit来模拟您的public void方法,如下所示:

new MockUp<SomeOtherClass>() {
    @Mock
    public void processTask(String value, List<Map<String, String>> mappings) throws Exception {
        System.out.println("Hello World");
    }
};

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM