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中增加如下的依赖:

  1. <dependencies>
  2. <dependency>
  3. <groupId>org.mockito</groupId>
  4. <artifactId>mockito-all</artifactId>
  5. </version>
  6. <scope>test</scope>
  7. </dependency>
  8. </dependencies>
  1. <dependencies>
  2. <dependency>
  3. <groupId>org.mockito</groupId>
  4. <artifactId>mockito-all</artifactId>
  5. </version>
  6. <scope>test</scope>
  7. </dependency>
  8. </dependencies>

Mocktio包的引入  在程序中可以import org.mockito.Mockito;然后调用它的static方法,或者import static org.mockito.Mockito.*;个人倾向于后者,因为这样可以更方便些。 
一个简单的例子

  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. * @author Brian Zhao
  8. */
  9. public   class  SimpleTest {
  10. @Test
  11. public   void  simpleTest(){
  12. //arrange
  13. Iterator i=mock(Iterator.class );
  14. when(i.next()).thenReturn("Hello" ).thenReturn( "World" );
  15. //act
  16. String result=i.next()+" " +i.next();
  17. //verify
  18. )).next();
  19. //assert
  20. assertEquals("Hello World" , result);
  21. }
  22. }
  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. * @author Brian Zhao
  8. */
  9. public class SimpleTest {
  10. @Test
  11. public void simpleTest(){
  12. //arrange
  13. Iterator i=mock(Iterator.class);
  14. when(i.next()).thenReturn("Hello").thenReturn("World");
  15. //act
  16. String result=i.next()+" "+i.next();
  17. //verify
  18. )).next();
  19. //assert
  20. assertEquals("Hello World", result);
  21. }
  22. }

在上面的例子中包含了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返回 值是否和预期一样。

Mockito学习1的更多相关文章

  1. mockito学习

    mockito学习 写一个测试用例,如果在测试类上面添加了注解@RunWith(SpringJUnit4ClassRunner.class),必须添加@ContextConfiguration(&qu ...

  2. Mockito 学习资料

    Mockito 学习资料 网址 单元测试指南:Mockito https://blinkfox.github.io/2018/11/15/hou-duan/java/dan-yuan-ce-shi-z ...

  3. Mockito学习(zz)

    junitmaven软件测试框架项目管理  Mockito是一个流行的Mocking框架.它使用起来简单,学习成本很低,而且具有非常简洁的API,测试代码的可读性很高.因此它十分受欢迎,用 户群越来越 ...

  4. Mockito学习资料

    官网:http://mockito.org/ https://dzone.com/refcardz/mockito

  5. mockito学习笔记

    mockito http://mockito.github.io/mockito/docs/current/org/mockito/Mockito.html

  6. mockito使用

    mockito学习资料: http://docs.mockito.googlecode.com/hg/org/mockito/Mockito.html http://blog.csdn.net/sdy ...

  7. 学习Mockito - Mockito对Annotation的支持

    学习Mockito - Mockito对Annotation的支持 博客分类: test junit工作  Mockito支持对变量进行注解,例如将mock对象设为测试类的属性,然后通过注解的方式@M ...

  8. mockito测试入门学习

    一.什么是mock测试,什么是mock对象? 先来看看下面这个示例: 从上图可以看出如果我们要对A进行测试,那么就要先把整个依赖树构建出来,也就是BCDE的实例. 一种替代方案就是使用mocks 从图 ...

  9. 学习hamcrest和mockito时的总结和demo

    UT中需要的jar Junit4.1X.jar hamcrest-library-1.x.jar hamcrest-core-l.x.jar mockito-all-1.10.x.jar Junit ...

随机推荐

  1. 搭建asp渗透测试环境

    win2k3下载地址 http://yun.baidu.com/share/link?shareid=77306757&uk=2852438886 win2003 Enterprise Edi ...

  2. 解题(StringJiaMi--字符串加密)

    题目描述 有一种技巧可以对数据进行加密,它使用一个单词作为它的密匙.下面是它的工作原理:首先,选择一个单词作为密匙,如TRAILBLAZERS.如果单词中包含有重复的字母,只保留第1个,其余几个丢弃. ...

  3. tab template

    <div class="box"> <div class="box-body"> <div class="nav-tab ...

  4. suse glibcxx版本过高问题

    实际开发中发现,suse11虽然glibc版本很低,只有2.11.3,但是glibcxx版本很高,达到了3.4.19.这里我需要降低glibcxx版本.所谓glibcxx版本,即libstdc++.s ...

  5. set<pair<int,int> >的用法

    例题链接:https://vjudge.net/contest/236677#problem/D 题意:首先输入两个数字n,m.n表示有n张桌子,编号从1到n,m表示有m个操作, 然后接下来一行有n个 ...

  6. Balanced Numbers (数位DP)

    Balanced Numbers https://vjudge.net/contest/287810#problem/K Balanced numbers have been used by math ...

  7. 【mysql】字段支持JSON类型

    mysql从5.7开始已经支持JSON类型的字段. 支持的操作:添加,修改,置空,子key添加,子key重置,子key删除,通过子key查找等. 但是这里和普通字段的修改和查找不同,涉及到一些JSON ...

  8. bitcode?

    今天在网站上看到一篇关于第三方库不包含bitcode就会报错的文章,感觉剖析得很详细,分享出来,希望可以对iOS初入门者有所帮助.下面我们就一起来看看吧. 用Xcode 7 beta 3在真机(iOS ...

  9. java 线程Thread 技术--1.5 Executor Executors,ThreadPool,Queue

    Executors : Executors ,就是一个线程工具类:大部分操作线程的方法,都可以在这个工具类中就行创建,执行,调用一些线程的方法: Executor : 用于执行和提交一个runnabl ...

  10. avalon子孙元素属性监听

    HTML正文: <body ms-controller="ex"> <div class="ms-hover" ms-click=" ...