使用 Mockito 跳过方法执行

Skipping a method execution using Mockito

我正在使用 Mockito 进行单元测试,我想跳过方法的执行。

我参考了这张票 。在这里,我假设 doSomeTask() 和 createLink() 方法在不同的 classes 中。但就我而言,这两种方法都在相同的 class (ActualClass.java).

//Actual Class

public class ActualClass{
    
    //The method being tested
    public void method(){
        //some business logic
        validate(param1, param2);

        //some business logic
    }

    public void validate(arg1, arg2){
        //do something
    }
}

//Test class

public class ActualClassTest{

    @InjectMocks
    private ActualClass actualClassMock;

    @Test
    public void test_method(){

        ActualClass actualClass = new ActualClass();
        ActualClass spyActualClass = Mockito.spy(actualClass);

        // validate method creates a null pointer exception, due to some real time data fetch from elastic

        doNothing().when(spyActualClass).validate(Mockito.any(), Mockito.any());
        actualClassMock.method();
    }
}

由于执行validate方法时出现空指针异常,我试图通过上面提到的票证中所述的侦听ActualClass对象来跳过方法调用。尽管如此,问题仍未解决。 validate 方法被执行并创建一个空指针异常,因此无法覆盖实际的测试方法。

那么,如何跳过同一 class.

中的 validate() 方法的执行

调用 method() 时必须始终使用间谍 class。

   @Test
    public void test_method(){
        ActualClass spyActualClass = Mockito.spy(actualClassMock);

        doNothing().when(spyActualClass).validate(Mockito.any(), Mockito.any());
        spyActualClass.method();
    }

实际上,而不是

actualClassMock.method();

你必须使用

spyActualClass.method();

如果有任何外部依赖项,可以同时使用以下两个注释。 @InjectMocks @间谍 这实际上会监视原始方法。 如果要跳过的方法存在于其他文件中,请使用@Spy 注释class 的对象,其中存在要跳过的方法。