mockito5.4.0单元测试(4) --主动throw异常,模拟异常处理,doThrow和thenThrow

【case 1】

import static org.mockito.Mockito.*;    // 引入类
 
LinkedList mockedList = mock(LinkedList.class);     // 获得mock对象
 
//stubbing
when(mockedList.get(0)).thenReturn("first");          // 如果获取0索引,则返回:first 
when(mockedList.get(1)).thenThrow(new RuntimeException());  // 如果获取1索引,则throw异常
 
//following prints "first"
System.out.println(mockedList.get(0));     // 正常获得0: first
 
//following throws runtime exception
System.out.println(mockedList.get(1));    // 代码抛出异常,执行被终止
 
//following prints "null" because get(999) was not stubbed    
System.out.println(mockedList.get(999));       // 如果get(1) 那一行代码被注释掉,则这里执行得到的是个Null
 
verify(mockedList).get(0);       // 校验曾经交互get过0这个索引对象,如果get(1) 那一行被注释掉,则代码会执行到这里,并且会pass
verify(mockedList).get(10);      // 校验曾经交互get过10这个索引对象,如果get(1) 那一行被注释掉,则代码会执行到这里,但是会fail失败,因为上面的交互行为中从来没有被get过10索引
 
 

 

【case 2】

import static org.mockito.Mockito.*;

LinkedList mockedList = mock(LinkedList.class);
// 如果调用clear方法,就抛出异常
doThrow(new RuntimeException("my_error_123456")).when(mockedList).clear();
// clear清空list对象,此处会抛出异常
mockedList.clear();
 
 
 
 
 
end.
 
posted on 2023-06-19 16:12  梦幻朵颜  阅读(743)  评论(0编辑  收藏  举报