使用Mockito跳过方法执行

4

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

我参考了这个帖子:Skip execution of a line using Mockito。在这里,我假设doSomeTask()和createLink()方法在不同的类中。但在我的情况下,两个方法都在同一个类(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方法出现了空指针异常,导致实际测试方法无法覆盖。

那么我该如何跳过同类中的validate()方法的执行呢?

2个回答

2

在调用method()时,您必须始终使用您的间谍类。

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

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

实际上,在实践中,与其
actualClassMock.method();

你必须使用

spyActualClass.method();

2

如果存在任何外部依赖关系,则可以同时使用以下两个注释。

@InjectMocks

@Spy

这将实际上会对原始方法进行监视。

如果要跳过的方法存在于其他文件中,请使用 @Spy 注释该类的对象,其中包含要跳过的方法。


你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接