使用Mockito跳过行的执行

2022-07-24 00:00:00 unit-testing mockito java junit

我正在使用moockito进行单元测试,我想跳过一行。

// method I am testing
public String doSomeTask(String src, String dst) {
    // some code

    utils.createLink(src,dst);

    // some more code
} 


// utils class
public void createLink(String src, String dst) {
    // do something
    Path realSrc = "/tmp/" + src;
    Files.createSymbolicLink(realSrc, dst);

    // do something
}


// Test class

@Mock
private Utils utils;

@Test
public void testDoSomeTask() {
    // this does not seem to work, it is still executing the createLink method
    doNothing.when(utils).createLink(anyString(), anyString());
    myClass.doSomeTask(anyString(), anyString());
}
现在,createLink是一个无效方法,在我的测试过程中,由于异常原因AccessDenied创建目录失败。

我想跳过第utils.createLink(src,dst);行,然后继续下一行。有什么方法可以让Mockito这么做吗?


解决方案

假设可以使用setter设置utils变量,则可以窥探Utils类对象并重写其createLink()方法。

基本思想是:

Utils utils = new Utils();
Utils spyUtils = Mockito.spy(utils);
doNothing().when(spyUtils).createLink(any(String.class), any(String.class));
现在,通过setter设置此spyUtils对象。每次调用createLink时,它不执行任何操作。

相关文章