Mockito(一)——入門篇

Mockito是一種mock工具/框架。我理解EasyMock有點過期了,Mockito是如今比較流行的。 框架

什麼是mock?說的直白一點,你們都知道unit test應該是儘量獨立的。對一個class的unit test不該該再和其餘class有任何交互。 工具

如今有一個類,掃描一個目錄並將找到的文件都上傳到FTP server。該類對於不一樣的FTP響應(找不到FTP server 或 上傳成功,或上傳失敗),有一些後續操做。 測試

在寫這個類的UT時,咱們就必須虛構出來一個FTP對象。這樣在UT中,這個虛構的對象可以代替真正的FTP,對被測試類的調用作出必定的響應。從而知道被測試類是否正確的調用了FTP並作出一些正確的指望的響應。從而達到測試的目的。 spa

mock能夠模擬各類各樣的對象,從而代替真正的對象作出但願的響應。 .net

關於mock的概念和EasyMock,能夠參考: server

 Mock object and EasyMock framework 對象

http://blog.csdn.net/OnlyQi/archive/2011/04/26/6364885.aspx blog

 

官網:http://mockito.org/ element

 一篇很好的入門文章: 字符串

http://blog.csdn.net/huoshuxiao/archive/2010/12/30/6107835.aspx

 一些稍微複雜且實用一點的例子:

http://gojko.net/2009/10/23/mockito-in-six-easy-examples/

 

下面介紹mockito的基本使用方法。

 如前面所說,咱們須要建立一個mock對象來代替真的對象。

所以,

模擬對象是第一步。模擬對象使用mock();

指定mock對象被調用時的返回值是第二步,好比指定讓mockFTP對象第一次被調用時返回"找不到FTP server"。這一步通常稱爲stubbing。通常是when(mockedList.get(0)).thenReturn("first")的樣子。

驗證被測試類是否正確工做是第三步,使用verify()。例如,驗證當mockFTP對象返回"找不到FTP server"時,測試代碼是否按要求重試。

而後測試就完成啦~~

 

模擬對象:

  1. // 模擬LinkedList 的一個對象  
  2. LinkedList mockedList = mock(LinkedList.class);   
  3.   
  4. // 此時調用get方法,會返回null,由於尚未對方法調用的返回值作模擬   
  5. System.out.println(mockedList.get(999));  

模擬方法調用的返回值:

  好比

  1. // 模擬獲取第一個元素時,返回字符串first。  給特定的方法調用返回固定值在官方說法中稱爲stub。
  2. when(mockedList.get(0)).thenReturn("first");   
  3.   
  4. // 此時打印輸出first   
  5. System.out.println(mockedList.get(0));  

模擬方法調用拋出異常:

  1. // 模擬獲取第二個元素時,拋出RuntimeException  
  2. when(mockedList.get(1)).thenThrow(new RuntimeException());   
  3.   
  4. // 此時將會拋出RuntimeException  
  5. System.out.println(mockedList.get(1));  
 沒有返回值類型的方法也能夠模擬異常拋出:

doThrow(new RuntimeException()).when(mockedList).clear();

 

模擬調用方法時的參數匹配:

  1. // anyInt()匹配任何int參數,這意味着參數爲任意值,其返回值均是element  
  2. when(mockedList.get(anyInt())).thenReturn("element");   
  3.   
  4. // 此時打印是element   
  5. System.out.println(mockedList.get(999)); 

模擬方法調用次數:

  1. // 調用add一次   
  2. mockedList.add("once");   
  3.   
  4. // 下面兩個寫法驗證效果同樣,均驗證add方法是否被調用了一次  
  5. verify(mockedList).add("once");   
  6. verify(mockedList, times(1)).add("once");  
 還能夠經過atLeast(int i)和atMost(int i)來替代time(int i)來驗證被調用的次數最小值和最大值。

結束~很簡單吧。
這篇文章基本上是轉帖,下篇文章將介紹如何在代碼裏使用Mockito,最後介紹mockito的大部分功能。
相關文章
相關標籤/搜索