学习Mockito框架
创始人
2024-07-25 19:50:22
0

Mockito是一个流行的Mocking框架。它使用起来简单,学习成本很低,而且具有非常简洁的API,测试代码的可读性很高。因此它十分受欢迎,用户群越来越多,很多的开源的软件也选择了Mockito。要想了解更多有关Mockito的信息,请访问它的官方网站:http://mockito.org/

在开始使用Mockito之前,先简单的了解一下Stub和Mock的区别。

Stub对象用来提供测试时所需要的测试数据,可以对各种交互设置相应的回应。例如我们可以设置方法调用的返回值等等。Mockito中 when(…).thenReturn(…) 这样的语法便是设置方法调用的返回值。另外也可以设置方法在何时调用会抛异常等。Mock对象用来验证测试中所依赖对象间的交互是否能够达到预期。 Mockito中用 verify(…).methodXxx(…) 语法来验证 methodXxx方法是否按照预期进行了调用。有关stub和mock的详细论述见,Martin Fowler文章《Mocks Aren't Stub》http://martinfowler.com/articles/mocksArentStubs.html。在Mocking框架中所谓的mock对象实际上是作为上述的stub和mock对象同时使用的。因为它既可以设置方法调用返回值,又可以验证方法的调用。

Mockito的获取

Jar包的获取

可以访问下面的链接来下载最新的Jar包,笔者使用的当前最新版为: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;然后调用它的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的基本功能:

创建Mock对象

创建Mock对象的语法为,mock(class or interface)。例子中创建了Iterator接口的mock对象。

设置方法调用的预期返回

通过when(mock.someMethod()).thenReturn(value) 来设定mock对象某个方法调用时的返回值。例子中我们对Iterator接口的next()方法调用进行了预期设定,当调用next()方法时会返回”Hello”,由于连续设定了返回值,因此当第二次调用时将返回”World”。

验证方法调用

接下来对mock对象的next()方法进行了一系列实际的调用。mock对象一旦建立便会自动记录自己的交互行为,所以我们可以有选择的对它的交互行为进行验证。在Mockito中验证mock对象交互行为的方法是verify(mock).someMethod(…)。于是用此方法验证了 next()方法调用,因为调用了两次,所以在verify中我们指定了times参数(times的具体应用在后面会继续介绍)。最后assert返回值是否和预期一样。

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

【编辑推荐】

    Struts VS Spring两种MVC框架比较

    Spring MVC框架的高级配置

    Spring MVC框架的高级配置(上)

    Spring MVC框架的高级配置(下)

    设计REST风格的Java MVC框架:WebWind

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...