Mockito学习1
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中增加如下的依赖:
- <dependencies>
- <dependency>
- <groupId>org.mockito</groupId>
- <artifactId>mockito-all</artifactId>
- </version>
- <scope>test</scope>
- </dependency>
- </dependencies>
- <dependencies>
- <dependency>
- <groupId>org.mockito</groupId>
- <artifactId>mockito-all</artifactId>
- </version>
- <scope>test</scope>
- </dependency>
- </dependencies>
Mocktio包的引入 在程序中可以import org.mockito.Mockito;然后调用它的static方法,或者import static org.mockito.Mockito.*;个人倾向于后者,因为这样可以更方便些。
一个简单的例子
- 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
- )).next();
- //assert
- assertEquals("Hello World" , result);
- }
- }
- 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
- )).next();
- //assert
- assertEquals("Hello World", result);
- }
- }
在上面的例子中包含了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的更多相关文章
- mockito学习
mockito学习 写一个测试用例,如果在测试类上面添加了注解@RunWith(SpringJUnit4ClassRunner.class),必须添加@ContextConfiguration(&qu ...
- Mockito 学习资料
Mockito 学习资料 网址 单元测试指南:Mockito https://blinkfox.github.io/2018/11/15/hou-duan/java/dan-yuan-ce-shi-z ...
- Mockito学习(zz)
junitmaven软件测试框架项目管理 Mockito是一个流行的Mocking框架.它使用起来简单,学习成本很低,而且具有非常简洁的API,测试代码的可读性很高.因此它十分受欢迎,用 户群越来越 ...
- Mockito学习资料
官网:http://mockito.org/ https://dzone.com/refcardz/mockito
- mockito学习笔记
mockito http://mockito.github.io/mockito/docs/current/org/mockito/Mockito.html
- mockito使用
mockito学习资料: http://docs.mockito.googlecode.com/hg/org/mockito/Mockito.html http://blog.csdn.net/sdy ...
- 学习Mockito - Mockito对Annotation的支持
学习Mockito - Mockito对Annotation的支持 博客分类: test junit工作 Mockito支持对变量进行注解,例如将mock对象设为测试类的属性,然后通过注解的方式@M ...
- mockito测试入门学习
一.什么是mock测试,什么是mock对象? 先来看看下面这个示例: 从上图可以看出如果我们要对A进行测试,那么就要先把整个依赖树构建出来,也就是BCDE的实例. 一种替代方案就是使用mocks 从图 ...
- 学习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 ...
随机推荐
- 自定义sql server 聚合涵数
using System; using System.Data; using System.Data.SqlClient; using System.Data.SqlTypes; using Micr ...
- metasploit framework(五):meterpreter基本命令和python扩展
基于内存的DLL注入式payload 注入合法的系统进程并建立stager 基于stager上传和预加载DLL进行扩展模块的注入(客户端API) 基于stager建立的socket连接建立加密的TLS ...
- Redis集群部署及命令
一.简介 redis集群是一个无中心的分布式Redis存储架构,可以在多个节点之间进行数据共享,解决了Redis高可用.可扩展等问题. redis集群提供了以下两个好处: 将数据自动切分(split) ...
- STL::set/multiset
set: Sets are containers that store unique elements following a specific order.集合里面的元素不能修改,只能访问,插入或 ...
- Linux下常用的编辑文件与保存命令
打开文件: vi aaa.conf 编辑: i 编辑结束,按ESC 键 跳到命令模式,然后输入退出命令: :w (write)保存文件但不退出vi 编辑 :w! 强制保存,不退出vi 编辑 :w fi ...
- pta l2-8(最长对称字串)
题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805067704549376 题意:求给定字符串的最长回文串的长 ...
- openstack(Pike 版)集群部署(六)--- Horizon 部署
一.介绍 参照官网部署:https://docs.openstack.org/horizon/pike/install/ 继续上一博客进行部署:http://www.cnblogs.com/we ...
- Java之成员访问控制
Java中数据成员.方法成员有四种访问控制.
- bootloader新的理解
1.对于bootloader这样的程序,作为板卡刚开始启动的部分,大致的顺序是一致的,大部分都是分为两个部分,一部分是汇编编写的,一部分是用c语言编写的.一般在汇编部分完成各种初始化的操作,比如关闭看 ...
- Sigar--系统性能监测
Sigar(System Information Gatherer And Reporter),是一个开源的工具,提供了跨平台的系统信息收集的API.可以收集的信息包括: 1, CPU信息,包括基本信 ...