mockito入門學習


Mockito.when(mockService.queryInfo(Mockito.any(QueryCod.class))).thenReturn(uInfo);
mockService為接口;
queryInfo是mockService接口里的方法;
QueryCod是方法queryInfo的入參,是一個class對象;且只有一個入參。
uInfo是方法queryInfo的執行結果,uInfo是mock的一個結果。

Mockito.when(mockQueryFacade.queryByRoleId(Mockito.anyString(),Mockito.any(QueryContext.class))).thenReturn(QueryResult);

mockQueryFacade是接口;
queryByRoleId是
mockQueryFacade接口里的方法;
queryByRoleId方法有兩個入參,
QueryResult queryByRoleId(String roleId, QueryContext context);兩個入參均mock。
QueryResult為查詢的結果。
需要導入
import static org.mockito.Mockito.*; import static org.junit.Assert.*; import java.util.Iterator; import org.junit.Test;
mock可以模擬各種各樣的對象,替代真正的對象做出希望的響應。
使用mockito的方法:
1、使用mock()模擬對象。
//模擬LinkList的一個對象
LinkedList mockdedList = mock(LinkedList.class);
//此時條用get方法,會返回null,因為還沒有對方法調用的返回值做模擬。
System.out.printlin(mockedList.get(99));
2、指定mock對象被調用時的返回值。
a、模擬,方法調用的返回值。
//模擬獲取第一個元素時,返回字符串first。給特定的方法調用返回固定值,在官方說法中稱stub。
(stub,為屏蔽客戶調用遠程主機上的對象,必須提供某些方式來模擬本地對象,這種本地對象稱為存根stub)
when(mockedList.get(0).thenReturn("first"));
//此時打印輸出first
System.out.println(mockedList.get(0));
b、模擬,方法調用拋出異常
//模擬獲取第二個元素時,拋出RuntimeException
when(mockedList.get(1)).thenThrow(new RuntimeException);
//此時拋出RuntimeException異常
System.out.println(mockedList.get(1));

沒有返回值類型的方法也可以模擬異常拋出:
doThrow(new RuntimeException()).when(mockedList).clear();
c、模擬調用方法時的參數匹配
//anyInt()匹配任何int參數,這表示參數為任何值,均返回element
when(mockedList.get(anyInt())).thenReturn("element");
//此時打印是element
System.out.println(mockedList.get(99));
d、模擬方法調用次數
//調用add一次
mockedList.add("once");
//驗證add方法是否被調用了一次,兩種寫法效果一樣
verify(mockedList)add("once");
verify(mockedList,times(1)).add("once");
還可以通過atLeast(int i)和taMost(int i)來驗證被調用的次數的最小值和最大值
3、驗證被測試類是否正確工作,使用verify()。

默認情況下,對於所有的有返回值且沒有stub過的地方,mockito會返回相應的默認值,
對於內置類型會返回默認值,如int會返回0,布爾值返回false,對於其他type會返回null。
mock對象會覆蓋整個被mock的對象,因此沒有stub的方法只能返回默認值。
//重復stub兩次,則以第二次為准,如下將返回”second“
when(mockedList.get(0)).thenReturn("first");
when(mockedList.get(0)).thenReturn("second");
//下面這種形式表示第一次調用返回”first“,第二次調用返回”second“,可以寫n多個
when(mockedList.get(0)).thenReturn("first").thenReturn("second");
如果實際調用次數超過了stub過的次數,則會一直返回最后一次stub的值,如上例,第三次調用get(0),則返回 ”second“

驗證方法被調用了特定的次數
//驗證add方法被調用了兩次
verify(mockedList,times(2)).add("2");
//驗證add方法致至少被調用一次
verify(mockedList.atLeastOnce()).add("2");
//驗證add方法至少被調用兩次
verify(mockedList,atLeast(2)).add("2");
//驗證add方法最大被調用5次
verify(mockedList,atMost(5)).add("2");
//驗證add方法從未被調用
vreify(mockedList,never()).add("2");找到冗余的調用,使用never();




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM