【发布时间】:2015-09-25 20:40:10
【问题描述】:
我想对一个方法调用进行 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 是发生存根的行。
为什么会出现这个错误?
【问题讨论】:
-
如果你替换为
thenThrow(new ConnectionException("exception message"))- 它仍然会抛出 MockitoException 吗? -
不,它没有。实际上,同一个测试类中的其他测试之一就是这样做的,并且顺利通过。
-
我不明白你需要什么。你能写更多关于你的期望吗?
-
@Fariba 我想测试 papa.getMapper().map() 方法是否被调用了 41 次。因为,我的测试类只要抛出 ConnectionException 就会调用这个方法,但最多 40 次。
-
@bluesman80 我会检查您的
exceptions对象是否已使用 Arrays.fill() 正确填充。确保数组内的值不为空
标签: java unit-testing junit mockito