下面的代码:如何让Mockito模拟按顺序执行不同的操作?
ObjectMapper mapper = Mockito.mock(ObjectMapper.class);
Mockito.doThrow(new IOException()).when(mapper).writeValue((OutputStream) Matchers.anyObject(), Matchers.anyObject());
Mockito.doNothing().when(mapper).writeValue((OutputStream) Matchers.anyObject(), Matchers.anyObject());
try {
mapper.writeValue(new ByteArrayOutputStream(), new Object());
} catch (Exception e) {
System.out.println("EXCEPTION");
}
try {
mapper.writeValue(new ByteArrayOutputStream(), new Object());
} catch (Exception e) {
System.out.println("EXCEPTION");
}
预期输出是
EXCEPTION
吧?
但我什么也没得到
如果我那么做doThrow的doNothing后,我得到
EXCEPTION
EXCEPTION
所以它看起来是最后的模拟是被采取的那个...我想它会按照他们注册的顺序进行模拟。
我期待产生一个模拟抛出异常第一时间与正常完成,第二次......
没有意识到我不得不链接他们...... ;-) –