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. ));

模拟方法调用的返回值:

比如

  1. )).thenReturn("first");
  2. // 此时打印输出first
  3. System.out.println(mockedList.get(0));

模拟方法调用抛出异常:

  1. )).thenThrow(new RuntimeException());
  2. ));
 没有返回值类型的方法也可以模拟异常抛出:

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

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

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

模拟方法调用次数:

  1. // 调用add一次
  2. mockedList.add("once");
  3. )).add("once");
 还可以通过atLeast(int i)和atMost(int i)来替代time(int i)来验证被调用的次数最小值和最大值。

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

原文地址:https://blog.csdn.net/OnlyQi/article/details/6396646

最新文章

  1. Jquery EasyUI DataGrid .net实例
  2. CountDownLatch、CyclicBarrier、Semaphore、Exchanger
  3. Notepad++ install vi plugin
  4. javascript跨域解决方案
  5. 《Effect Java》 归纳总结
  6. 传智播客学习之HTML基础语法
  7. Jmeter组件介绍
  8. shape的使用
  9. struts2相关简单介绍
  10. [BZOJ 2083] [POI 2010] Intelligence test
  11. Spring HttpInvoker 从实战到源码追溯
  12. MVC 简介
  13. C# Autofac集成之Framework WebAPI
  14. C/C++基础----随机数分布和随机数引擎
  15. mybatis中文官网
  16. 动态绑定数据至Html Table
  17. Apache2.4配置(全)
  18. [leetcode]689. Maximum Sum of 3 Non-Overlapping Subarrays三个非重叠子数组的最大和
  19. Jenkins定时构建和轮询SCM设置说明
  20. 转-Python自然语言处理入门

热门文章

  1. js中的replace问题和textarea回车符问题
  2. LeetCode172 Factorial Trailing Zeroes. LeetCode258 Add Digits. LeetCode268 Missing Number
  3. OpenJudge_1936:All in All
  4. Spark in action on Kubernetes - 存储篇(一)
  5. 《js高级程序设计》6.1.1-6.1.3——数据属性、访问器属性
  6. PostgreSQL重新读取pg_hba.conf文件
  7. ssh scp nc
  8. 看看国外的JavaScript题目
  9. jmeter循环取消今天所有的订单
  10. 使用DataX同步MaxCompute数据到TableStore(原OTS)优化指南