自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

學(xué)習(xí)Mockito框架

開發(fā) 后端
Mockito是一個流行的Mocking框架。它使用起來簡單,學(xué)習(xí)成本很低,而且具有非常簡潔的API,測試代碼的可讀性很高。

Mockito是一個流行的Mocking框架。它使用起來簡單,學(xué)習(xí)成本很低,而且具有非常簡潔的API,測試代碼的可讀性很高。因此它十分受歡迎,用戶群越來越多,很多的開源的軟件也選擇了Mockito。要想了解更多有關(guān)Mockito的信息,請訪問它的官方網(wǎng)站:http://mockito.org/

在開始使用Mockito之前,先簡單的了解一下Stub和Mock的區(qū)別。

Stub對象用來提供測試時所需要的測試數(shù)據(jù),可以對各種交互設(shè)置相應(yīng)的回應(yīng)。例如我們可以設(shè)置方法調(diào)用的返回值等等。Mockito中 when(…).thenReturn(…) 這樣的語法便是設(shè)置方法調(diào)用的返回值。另外也可以設(shè)置方法在何時調(diào)用會拋異常等。Mock對象用來驗證測試中所依賴對象間的交互是否能夠達(dá)到預(yù)期。 Mockito中用 verify(…).methodXxx(…) 語法來驗證 methodXxx方法是否按照預(yù)期進(jìn)行了調(diào)用。有關(guān)stub和mock的詳細(xì)論述見,Martin Fowler文章《Mocks Aren't Stub》http://martinfowler.com/articles/mocksArentStubs.html。在Mocking框架中所謂的mock對象實際上是作為上述的stub和mock對象同時使用的。因為它既可以設(shè)置方法調(diào)用返回值,又可以驗證方法的調(diào)用。

Mockito的獲取

Jar包的獲取

可以訪問下面的鏈接來下載最新的Jar包,筆者使用的當(dāng)前最新版為:1.8.5 http://code.google.com/p/mockito/downloads/list

Maven

如果項目是通過Maven管理的,需要在項目的Pom.xml中增加如下的依賴:

Java代碼

  1.      
  2.      
  3. org.mockito     
  4. mockito-all     
  5. 1.8 . 5      
  6. test     
  7.      
  8.     

 

 

 

Java代碼

  1.      
  2.      
  3. org.mockito     
  4. mockito-all     
  5. 1.8.5     
  6. test     
  7.      
  8.   

 

 

 

Mocktio包的引入

在程序中可以import org.mockito.Mockito;然后調(diào)用它的static方法,或者import static org.mockito.Mockito.*;個人傾向于后者,因為這樣可以更方便些。

一個簡單的例子

Java代碼

  1. import   static  org.junit.Assert.*;     
  2. import   static  org.mockito.Mockito.*;     
  3. import  java.util.Iterator;     
  4. import  org.junit.Test;     
  5.      
  6. /**     
  7.  *      
  8.  * @author Brian Zhao     
  9.  */      
  10. public   class  SimpleTest {     
  11.          
  12.     @Test      
  13.     public   void  simpleTest(){     
  14.         //arrange      
  15.         Iterator i=mock(Iterator.class );     
  16.         when(i.next()).thenReturn("Hello" ).thenReturn( "World" );     
  17.         //act      
  18.         String result=i.next()+" " +i.next();     
  19.         //verify      
  20. verify(i, times(2 )).next();     
  21.         //assert      
  22.         assertEquals("Hello World" , result);     
  23.     }     
  24. }     

 

Java代碼

  1. import static org.junit.Assert.*;     
  2. import static org.mockito.Mockito.*;     
  3. import java.util.Iterator;     
  4. import org.junit.Test;     
  5.     
  6. /**    
  7.  *     
  8.  * @author Brian Zhao    
  9.  */    
  10. public class SimpleTest {     
  11.          
  12.     @Test    
  13.     public void simpleTest(){     
  14.         //arrange     
  15.         Iterator i=mock(Iterator.class);     
  16.         when(i.next()).thenReturn("Hello").thenReturn("World");     
  17.         //act     
  18.         String result=i.next()+" "+i.next();     
  19.         //verify     
  20. verify(i, times(2)).next();     
  21.         //assert     
  22.         assertEquals("Hello World", result);     
  23.     }     
  24. }    

 

在上面的例子中包含了Mockito的基本功能:

創(chuàng)建Mock對象

創(chuàng)建Mock對象的語法為,mock(class or interface)。例子中創(chuàng)建了Iterator接口的mock對象。

設(shè)置方法調(diào)用的預(yù)期返回

通過when(mock.someMethod()).thenReturn(value) 來設(shè)定mock對象某個方法調(diào)用時的返回值。例子中我們對Iterator接口的next()方法調(diào)用進(jìn)行了預(yù)期設(shè)定,當(dāng)調(diào)用next()方法時會返回”Hello”,由于連續(xù)設(shè)定了返回值,因此當(dāng)?shù)诙握{(diào)用時將返回”World”。

驗證方法調(diào)用

接下來對mock對象的next()方法進(jìn)行了一系列實際的調(diào)用。mock對象一旦建立便會自動記錄自己的交互行為,所以我們可以有選擇的對它的交互行為進(jìn)行驗證。在Mockito中驗證mock對象交互行為的方法是verify(mock).someMethod(…)。于是用此方法驗證了 next()方法調(diào)用,因為調(diào)用了兩次,所以在verify中我們指定了times參數(shù)(times的具體應(yīng)用在后面會繼續(xù)介紹)。最后assert返回值是否和預(yù)期一樣。

原文鏈接:http://javasee.iteye.com/blog/1000868

【編輯推薦】

責(zé)任編輯:金賀 來源: ITEYE博客
相關(guān)推薦

2021-06-08 07:32:01

框架Mock測試

2023-12-28 17:36:10

JUnit5單元測試框架

2023-10-07 08:45:47

2023-07-26 07:10:28

Mockito注解@Mock

2012-11-01 11:29:33

IBMdw

2009-06-29 16:50:27

Java集合框架

2022-12-22 13:18:54

深度學(xué)習(xí)框架

2018-12-13 10:37:13

Android開發(fā)框架

2015-11-06 10:26:53

JavaExecutor框架

2015-12-24 10:13:29

JavaExecutor框架

2011-03-31 09:22:20

PowerMock

2023-04-11 08:02:26

單測技術(shù)JUnit框架

2011-07-05 17:45:07

PHP框架

2014-07-18 08:47:26

KJFrameAndroidBitmap

2011-09-02 13:51:00

PhoneGap框架HTML5

2021-11-05 12:59:51

深度學(xué)習(xí)PytorchTenso

2023-02-26 01:25:23

Sanic框架工具

2016-12-15 09:44:31

框架Caffe源碼

2009-07-14 18:10:38

Swing應(yīng)用程序框架

2009-09-08 09:12:12

LINQ構(gòu)建框架設(shè)計
點贊
收藏

51CTO技術(shù)棧公眾號