我希望使用异常将方法调用存根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是发生存根的行。
为什么我会收到此错误?
答案 0 :(得分:4)
您收到此异常是因为您有一个包含41个元素的Throwable[]
,但您只能使用实际ConnectionException
值填充其中40个元素。最后一个是null
。
thenThrow
不接受投掷null
(which would cause a NullPointerException
to be thrown instead)。
您的数组应该只包含40个元素
Throwable[] exceptions = new Throwable[40];