如何在Mockito中多次存根异常

时间:2015-09-25 20:40:10

标签: java unit-testing junit mockito

我希望使用异常将方法调用存根40次,然后使用真实对象存根。据我所知,Mockito 1.10.8的thenThrow()方法接受了n个Throwables:

OngoingStubbing<T> thenThrow(Throwable... throwables);

因此,我认为我可以做到以下几点。

@RunWith(MockitoJUnitRunner.class)
public class MyObjectTest
{
    @Mock(answer = Answers.RETURNS_MOCKS)
    private Mama mama;

    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
    private Papa papa;

    private MyObject _instance;

    @Test
    public void test()
    {
        _instance = new MyObject(papa, mama);

        Throwable[] exceptions = new Throwable[41];

        Arrays.fill(exceptions, 0, 40, new ConnectionException("exception message"));

        when(papa.getMapper().map(anyString())).thenThrow(exceptions).thenReturn(new MyMap());

        verify(papa, times(41)).getMapper().map(anyString());
    }
}

但是,当我运行此测试时,我得到以下内容。

  

org.mockito.exceptions.base.MockitoException:   无法使用null throwable存根!       在MyObjectTest.test(MyObjectTest.java:105)

MyObjectTest.java:105是发生存根的行。

为什么我会收到此错误?

1 个答案:

答案 0 :(得分:4)

您收到此异常是因为您有一个包含41个元素的Throwable[],但您只能使用实际ConnectionException值填充其中40个元素。最后一个是null

thenThrow不接受投掷nullwhich would cause a NullPointerException to be thrown instead)。

您的数组应该只包含40个元素

Throwable[] exceptions = new Throwable[40];