簡體   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