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

Mockito -- 入门篇的更多相关文章

  1. spring boot(一):入门篇

    构建微服务:Spring boot 入门篇 什么是spring boot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框 ...

  2. Spring Boot(一):入门篇+前端访问后端

    转自:Spring Boot(一):入门篇 什么是Spring Boot Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发 ...

  3. (转)Spring boot(一):入门篇

    https://www.cnblogs.com/ityouknow/p/5662753.html#!comments 构建微服务:Spring boot 入门篇 什么是Spring Boot Spri ...

  4. Spring boot学习1 构建微服务:Spring boot 入门篇

    Spring boot学习1 构建微服务:Spring boot 入门篇 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框 ...

  5. Spring Boot(一):入门篇

    Spring Boot(一):入门篇 一.Spring Boot介绍 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程. 该框架 ...

  6. Spring Boot 2.X(一):入门篇

    什么是 Spring Boot Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程.该框架遵循"约定优于配置& ...

  7. Membership三步曲之入门篇 - Membership基础示例

    Membership 三步曲之入门篇 - Membership基础示例 Membership三步曲之入门篇 -  Membership基础示例 Membership三步曲之进阶篇 -  深入剖析Pro ...

  8. 1. web前端开发分享-css,js入门篇

    关注前端这么多年,没有大的成就,就入门期间积累了不少技巧与心得,跟大家分享一下,不一定都适合每个人,毕竟人与人的教育背景与成长环境心理活动都有差别,但就别人的心得再结合自己的特点,然后探索适合自己的学 ...

  9. 一个App完成入门篇(七)- 完成发现页面

    第七章是入门篇的倒数第二篇文章了,明天整个APP将进入收官. 本节教程主要要教会大家使用二维码扫描和用do_WebView组件加在html页面. 导入项目 do_WebView组件 扫描功能 自定义事 ...

随机推荐

  1. API管理的五大规则

    http://www.csdn.net/article/2012-12-18/2812929-5-Rules-For-API-Management 1. 设计 开发人员使用API访问各种不同的类,并且 ...

  2. 【插拔式】分页+bootstrap4(开源)

    1:分页源码 class Pagination(object): def __init__(self, PagerCount,Pages, perPageItemNum, maxPageNum): # ...

  3. 如何在云上使用confd+ACM管理敏感数据

    在前面的一些文章中,我们介绍了如何在云上安全的存放配置数据,但是上面的方法都是有代码侵入性的,也就是说需要修改应用程序,本文会讲解如何使用 confd+ACM 在不修改代码的情况下动态修改应用所需的配 ...

  4. JAVA高级特性--自动拆箱-装箱,枚举类型

    基本数据类型转换为引用类型对象 一个自动装箱的例子 Integer i=10; 相当于 Integer i=new Integer(10); 一个自动拆箱的例子 Integer m=10; int n ...

  5. int 和bigint差别有多大?

    https://bbs.csdn.net/wap/topics/230059600 请问在mysql中int和bigint差别有多大?在什么情况下需要用到bigint? bigint 带符号的范围是- ...

  6. HTTP Status 500 - java.lang.ClassNotFoundException: org.apache.jsp.register_jsp

    你搜一下你的页面中是不是有<!---->的注释 去掉就好了 改成jsp的注释 1).JSP页面中的HTML注释 JSP页面中的HTML注释使用“<!—”和“-->”创建,它的具 ...

  7. oralce函数 count(*|[distinct|all]x)

    [功能]统计数据表选中行x列的合计值. [参数] *表示对满足条件的所有行统计,不管其是否重复或有空值(NULL) all表示对所有的值统计,默认为all distinct只对不同的值统计, 如果有参 ...

  8. Java练习 SDUT-2240_织女的红线

    织女的红线 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 好久不见牛郎哥哥了,织女非常想他,但是她想考验一下牛郎在她不 ...

  9. 01docker简单使用和配置(容器、镜像)

    一:容器中运行简单应用程序 1:hello  world 使用docker可以在容器中运行应用程序,使用docker run命令即可.比如下面的命令: $ docker run ubuntu /bin ...

  10. Redis源码解析:09redis数据库实现(键值对操作、键超时功能、键空间通知)

    本章对Redis服务器的数据库实现进行介绍,说明Redis数据库相关操作的实现,包括数据库中键值对的添加.删除.查看.更新等操作的实现:客户端切换数据库的实现:键超时相关功能的实现.键空间事件通知等. ...