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

創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比東寧網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式東寧網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋東寧地區(qū)。費(fèi)用合理售后完善,十載實(shí)體公司更值得信賴。
在開始使用Mockito之前,先簡單的了解一下Stub和Mock的區(qū)別。
Stub對(duì)象用來提供測(cè)試時(shí)所需要的測(cè)試數(shù)據(jù),可以對(duì)各種交互設(shè)置相應(yīng)的回應(yīng)。例如我們可以設(shè)置方法調(diào)用的返回值等等。Mockito中 when(…).thenReturn(…) 這樣的語法便是設(shè)置方法調(diào)用的返回值。另外也可以設(shè)置方法在何時(shí)調(diào)用會(huì)拋異常等。Mock對(duì)象用來驗(yàn)證測(cè)試中所依賴對(duì)象間的交互是否能夠達(dá)到預(yù)期。 Mockito中用 verify(…).methodXxx(…) 語法來驗(yàn)證 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對(duì)象實(shí)際上是作為上述的stub和mock對(duì)象同時(shí)使用的。因?yàn)樗瓤梢栽O(shè)置方法調(diào)用返回值,又可以驗(yàn)證方法的調(diào)用。
Mockito的獲取
Jar包的獲取
可以訪問下面的鏈接來下載最新的Jar包,筆者使用的當(dāng)前最新版為:1.8.5 http://code.google.com/p/mockito/downloads/list
Maven
如果項(xiàng)目是通過Maven管理的,需要在項(xiàng)目的Pom.xml中增加如下的依賴:
Java代碼
- org.mockito
- mockito-all
- 1.8 . 5
- test
Java代碼
- org.mockito
- mockito-all
- 1.8.5
- test
Mocktio包的引入
在程序中可以import org.mockito.Mockito;然后調(diào)用它的static方法,或者import static org.mockito.Mockito.*;個(gè)人傾向于后者,因?yàn)檫@樣可以更方便些。
一個(gè)簡單的例子
Java代碼
- import static org.junit.Assert.*;
- import static org.mockito.Mockito.*;
- import java.util.Iterator;
- import org.junit.Test;
- /**
- *
- * @author Brian Zhao
- */
- public class SimpleTest {
- @Test
- public void simpleTest(){
- //arrange
- Iterator i=mock(Iterator.class );
- when(i.next()).thenReturn("Hello" ).thenReturn( "World" );
- //act
- String result=i.next()+" " +i.next();
- //verify
- verify(i, times(2 )).next();
- //assert
- assertEquals("Hello World" , result);
- }
- }
Java代碼
- import static org.junit.Assert.*;
- import static org.mockito.Mockito.*;
- import java.util.Iterator;
- import org.junit.Test;
- /**
- *
- * @author Brian Zhao
- */
- public class SimpleTest {
- @Test
- public void simpleTest(){
- //arrange
- Iterator i=mock(Iterator.class);
- when(i.next()).thenReturn("Hello").thenReturn("World");
- //act
- String result=i.next()+" "+i.next();
- //verify
- verify(i, times(2)).next();
- //assert
- assertEquals("Hello World", result);
- }
- }
在上面的例子中包含了Mockito的基本功能:
創(chuàng)建Mock對(duì)象
創(chuàng)建Mock對(duì)象的語法為,mock(class or interface)。例子中創(chuàng)建了Iterator接口的mock對(duì)象。
設(shè)置方法調(diào)用的預(yù)期返回
通過when(mock.someMethod()).thenReturn(value) 來設(shè)定mock對(duì)象某個(gè)方法調(diào)用時(shí)的返回值。例子中我們對(duì)Iterator接口的next()方法調(diào)用進(jìn)行了預(yù)期設(shè)定,當(dāng)調(diào)用next()方法時(shí)會(huì)返回”Hello”,由于連續(xù)設(shè)定了返回值,因此當(dāng)?shù)诙握{(diào)用時(shí)將返回”World”。
驗(yàn)證方法調(diào)用
接下來對(duì)mock對(duì)象的next()方法進(jìn)行了一系列實(shí)際的調(diào)用。mock對(duì)象一旦建立便會(huì)自動(dòng)記錄自己的交互行為,所以我們可以有選擇的對(duì)它的交互行為進(jìn)行驗(yàn)證。在Mockito中驗(yàn)證mock對(duì)象交互行為的方法是verify(mock).someMethod(…)。于是用此方法驗(yàn)證了 next()方法調(diào)用,因?yàn)檎{(diào)用了兩次,所以在verify中我們指定了times參數(shù)(times的具體應(yīng)用在后面會(huì)繼續(xù)介紹)。最后assert返回值是否和預(yù)期一樣。
原文鏈接:http://javasee.iteye.com/blog/1000868
【編輯推薦】
Struts VS Spring兩種MVC框架比較
Spring MVC框架的高級(jí)配置
Spring MVC框架的高級(jí)配置(上)
Spring MVC框架的高級(jí)配置(下)
設(shè)計(jì)REST風(fēng)格的Java MVC框架:WebWind
網(wǎng)頁標(biāo)題:學(xué)習(xí)Mockito框架
本文來源:http://fisionsoft.com.cn/article/dheeips.html


咨詢
建站咨詢
