下面的代碼:如何讓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
所以它看起來是最後的模擬是被採取的那個...我想它會按照他們註冊的順序進行模擬。
我期待產生一個模擬拋出異常第一時間與正常完成,第二次......
沒有意識到我不得不鏈接他們...... ;-) –