如何用mock替换方法调用?

时间:2014-07-21 16:28:14

标签: java unit-testing mockito

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

这是我的课程

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());
    }
}

为什么我在开始测试时会遇到异常?

1 个答案:

答案 0 :(得分:2)

有两件事可以帮助你。首先,从文档中看来,您需要将do*() api与spy()个对象一起使用。第二,打电话给真实的"您需要使用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());
    }
}