文档章节

Mockito(一)——入门篇

chace0120
 chace0120
发布于 2014/04/01 09:36
字数 846
阅读 795
收藏 1

Mockito是一种mock工具/框架。我理解EasyMock有点过时了,Mockito是现在比较流行的。

什么是mock?说的直白一点,大家都知道unit test应该是尽可能独立的。对一个class的unit test不应该再和其他class有任何交互。

现在有一个类,扫描一个目录并将找到的文件都上传到FTP server。该类对于不同的FTP响应(找不到FTP server 或 上传成功,或上传失败),有一些后续操作。

在写这个类的UT时,我们就必须虚构出来一个FTP对象。这样在UT中,这个虚构的对象能够代替真正的FTP,对被测试类的调用做出一定的响应。从而知道被测试类是否正确的调用了FTP并做出一些正确的期望的响应。从而达到测试的目的。

mock可以模拟各种各样的对象,从而代替真正的对象做出希望的响应。

关于mock的概念和EasyMock,可以参考:

 Mock object and EasyMock framework

http://blog.csdn.net/OnlyQi/archive/2011/04/26/6364885.aspx

 

官网:http://mockito.org/

 一篇很好的入门文章:

http://blog.csdn.net/huoshuxiao/archive/2010/12/30/6107835.aspx

 一些稍微复杂且实用一点的例子:

http://gojko.net/2009/10/23/mockito-in-six-easy-examples/

 

下面介绍mockito的基本使用方法。

 如前面所说,我们需要创建一个mock对象来代替真的对象。

因此,

模拟对象是第一步。模拟对象使用mock();

指定mock对象被调用时的返回值是第二步,比如指定让mockFTP对象第一次被调用时返回"找不到FTP server"。这一步一般称为stubbing。一般是when(mockedList.get(0)).thenReturn("first")的样子。

验证被测试类是否正确工作是第三步,使用verify()。例如,验证当mockFTP对象返回"找不到FTP server"时,测试代码是否按要求重试。

然后测试就完成啦~~

 

模拟对象:

  1. // 模拟LinkedList 的一个对象  
  2. LinkedList mockedList = mock(LinkedList.class);   
  3.   
  4. // 此时调用get方法,会返回null,因为还没有对方法调用的返回值做模拟   
  5. System.out.println(mockedList.get(999));  

模拟方法调用的返回值:

  比如

  1. // 模拟获取第一个元素时,返回字符串first。  给特定的方法调用返回固定值在官方说法中称为stub。
  2. when(mockedList.get(0)).thenReturn("first");   
  3.   
  4. // 此时打印输出first   
  5. System.out.println(mockedList.get(0));  

模拟方法调用抛出异常:

  1. // 模拟获取第二个元素时,抛出RuntimeException  
  2. when(mockedList.get(1)).thenThrow(new RuntimeException());   
  3.   
  4. // 此时将会抛出RuntimeException  
  5. System.out.println(mockedList.get(1));  
 没有返回值类型的方法也可以模拟异常抛出:

doThrow(new RuntimeException()).when(mockedList).clear();

 

模拟调用方法时的参数匹配:

  1. // anyInt()匹配任何int参数,这意味着参数为任意值,其返回值均是element  
  2. when(mockedList.get(anyInt())).thenReturn("element");   
  3.   
  4. // 此时打印是element   
  5. System.out.println(mockedList.get(999)); 

模拟方法调用次数:

  1. // 调用add一次   
  2. mockedList.add("once");   
  3.   
  4. // 下面两个写法验证效果一样,均验证add方法是否被调用了一次  
  5. verify(mockedList).add("once");   
  6. verify(mockedList, times(1)).add("once");  
 还可以通过atLeast(int i)和atMost(int i)来替代time(int i)来验证被调用的次数最小值和最大值。

结束~很简单吧。
这篇文章基本上是转帖,下篇文章将介绍如何在代码里使用Mockito,最后介绍mockito的大部分功能。

本文转载自:http://blog.csdn.net/onlyqi/article/details/6396646

共有 人打赏支持
chace0120
粉丝 38
博文 48
码字总数 41091
作品 0
安阳
程序员
私信 提问
民工哥公众号linux系统学习线路图大全

民工哥公众号linux系统学习线路图大全 <-----------点击链接进入 友侃有笑公众号Linux学习路线图 1、基础篇 Linux 基础优化配置 Linux系统根目录结构介绍 linux系统重要子目录介绍 Linux文件...

民工哥
2017/08/30
0
0
【目录导航】JAVA零基础进阶之路

【JAVA零基础入门系列】(已完结)导航目录 Day1 开发环境搭建 Day2 Java集成开发环境IDEA Day3 Java基本数据类型 Day4 变量与常量 Day5 Java中的运算符 Day6 Java字符串 Day7 Java输入与输出...

MFrank
06/21
0
0
WorkFlow4.0--入门到精通系列-专题索引

开篇 首先、非常感谢大家的支持和厚爱,才有了这个系列,WF4.0也是微软比较主推的技术之一,工作流未来必火,是未来企业信息化的发展方向和道路,所以对工 作流掌握,对我们来说,也就是必须...

何戈洲
2011/06/16
0
0
《PHP框架Yii学习》系列技术文章整理收藏

《PHP框架Yii学习》系列技术文章整理收藏 1Yii Framework框架获取分类下面的所有子类方法 2YII模块实现绑定二级域名的方法 3Yii框架官方指南系列43——专题:URL(创建、路由、美化及自定义)...

开元中国2015
2015/05/30
232
0
Kotlin Weekly 中文周报 —— 16

Kotlin 开发中文周报 文章 Android 开发者的一些实用技巧。(github.com) Ravindra 在 DevfestAhm 2017 的演讲。 像 Kotlin 的专家一样测试 。(blog.karumi.com) 将 Kotlin 库发布到 jCente...

DoubleThunder
2017/11/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

如何解决 homebrew 更新慢的问题

之前一直困扰于 Homebrew 的更新速度,曾试过修改更新源(清华、中科大等)的方式,但是并没什么卵用;也试过设置 curl 代理的方式,但是 brew 走的好像不是 curl 的方式,所以也没用。 通过...

whoru
10分钟前
0
0
TiDB EcoSystem Tools 原理解读系列(二)TiDB-Lightning Toolset 介绍

简介 TiDB-Lightning Toolset 是一套快速全量导入 SQL dump 文件到 TiDB 集群的工具集,自 2.1.0 版本起随 TiDB 发布,速度可达到传统执行 SQL 导入方式的至少 3 倍、大约每小时 100 GB,适合...

TiDB
12分钟前
0
0
【Visual Studio 扩展工具】如何在ComponentOneFlexGrid树中显示RadioButton

概述 在ComponentOne Enterprise .NET控件集中,FlexGrid表格控件是用户使用频率最高的控件之一。它是一个功能强大的数据管理工具,轻盈且灵动,以分层的形式展示数据(数据呈现更加直观)。...

葡萄城技术团队
15分钟前
0
0
Maven环境隔离

Maven环境隔离 1. 什么是Maven环境隔离 顾名思义,Maven环境隔离就是将开发中的环境与beat环境、生产环境分隔开,方便进行开发和维护。这个在实际项目中用的还是很多的,如果你的项目用的Mav...

蚂蚁-Declan
15分钟前
1
0
day182-2018-12-19-英语流利阅读-待学习

“性感”时代已去,维密将如何转身? Daniel 2018-12-19 1.今日导读 维多利亚的秘密(Victoria's Secret)这个内衣品牌,最近似乎步入了“中年危机”——曾经打遍天下的“性感”内衣,在主打...

飞鱼说编程
15分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部