如何用mock替换方法调用



我有一个有两个方法的类。我想用预期的结果替换第二个方法的调用。

下面是我要测试的类

public class A {
    public int methodOne() {
        return methodTwo(1);
    }
    public int methodTwo(int param) {
        // corresponding logic replaced for demo
        throw new RuntimeException("Wrong invocation!");
    }
}

和测试

public class ATest {
    @Test
    public void test() {
        final A a = spy(new A());
        when(a.methodTwo(anyInt())).thenReturn(10);
        a.methodOne();
        verify(a, times(1)).methodTwo(anyInt());
    }
}

为什么我得到一个异常时,开始测试?

这里有两件事可以帮助您。首先,从文档来看,您似乎需要将do*() api与spy()对象一起使用。其次,要调用"real"方法,需要使用doCallRealMethod()

明确声明它。

这是更新后的测试,应该适合你:

public class ATest {
    @Test
    public void test() {
        final A a = spy(new A());
        doReturn(10).when(a).methodTwo(anyInt());
        doCallRealMethod().when(a).methodOne();
        a.methodOne();
        verify(a, times(1)).methodTwo(anyInt());
    }
}

相关内容

  • 没有找到相关文章

最新更新