窥探EasyMock(2)进阶使用篇

时间:2022-05-10 22:23:41

from:http://www.iteye.com/topic/310313

1. 生成 Mock 对象

如何创建一个需要严格遵守调用顺序的mock对象?

  1. SomeInterface mockObj = createStrictMock(SomeInterface.class);

如果你不想对每一个方法设定预期行为,对于这些非预期的方法调用你不想让EasyMock抛出AssertionError,你可以创建一个“nice”的mock对象,所有没有设定预期行为的方法会悄悄地返回一些空值(0, null或者false)。

  1. SomeInterface mockObj = createNiceMock(SomeInterface.class);

当然,如果你使用MockControl来创建Mock对象,都有相应的方法:createStrictControl和createNiceControl。(其实当你调用createMock等方法时,都生成了一个相应的control。)

2. 开关调用顺序检查

如果在测试某处你想关闭strict模式,使用:

  1. checkOrder(mockObj, false);

当然,如果想重新开启,可以使用

  1. checkOrder(mockObj, true);

3. 设定预期行为和输出

期望一个方法始终返回期望的值,而不管调用次数:

  1. expect(mockObj.someAction(1)).andStubReturn("one");

下面的方法与此等价:

  1. expect(mockObj.someAction(1)).andReturn("one").anyTimes();

设定确定的调用次数:

  1. expect(mockObj.someAction(1)).andReturn("one").times(3);

设定调用次数在某个范围内:

  1. expect(mockObj.someAction(1)).andReturn("one").times(3, 5);

期望抛出异常:

  1. expect(mockObj.someAction(1)).andThrow(someException);

4. 参数匹配

任意参数:

  1. expect(mockObj.someAction(anyInt())).andStubReturn("one");

当然,相应的有anyObject(), anyChar()等等。

在参数上应用逻辑操作:

  1. expect(mockStatement.executeQuery(and(startsWith("select"), endsWith("order;")))).andReturn(mockResultSet);

EasyMock提供大量其它的逻辑操作。

自定义参数匹配器:

  1. expect(mockStatement.executeQuery(SQLEquals("SELECT * FROM ORDER;"))).andReturn(mockResultSet);
  1. private static String SQLEquals(String in) {
  2. reportMatcher(new SQLEquals(in));
  3. return in;
  4. }
  5. private static class SQLEquals implements IArgumentMatcher {
  6. private String expectedSql;
  7. public SQLEquals(String expectedSql) {
  8. this.expectedSql = expectedSql;
  9. }
  10. public boolean matches(Object actualSql) {
  11. if (actualSql == null && expectedSql == null)
  12. return true;
  13. if (actualSql.getClass() == String.class)
  14. return expectedSql.equalsIgnoreCase((String) actualSql);
  15. return false;
  16. }
  17. // others omited.
  18. }

5. 没有结束

EasyMock还提供了太多其他的功能,大家还是查API吧。

窥探EasyMock(2)进阶使用篇的更多相关文章

  1. 老王Python培训视频教程(价值500元)【基础进阶项目篇 – 完整版】

    老王Python培训视频教程(价值500元)[基础进阶项目篇 – 完整版] 教学大纲python基础篇1-25课时1.虚拟机安装ubuntu开发环境,第一个程序:hello python! (配置开发 ...

  2. JMeter学习-011-JMeter 后置处理器实例之 - 正则表达式提取器(三)多参数获取进阶引用篇

    前两篇文章分表讲述了 后置处理器 - 正则表达式提取器概述及简单实例.多参数获取,相应博文敬请参阅 简单实例.多参数获取. 此文主要讲述如何引用正则表达式提取器获取的数据信息.其实,正则表达式提取器获 ...

  3. SpringBootTest单元测试实战、SpringBoot测试进阶高级篇之MockMvc讲解

    1.@SpringBootTest单元测试实战 简介:讲解SpringBoot的单元测试 1.引入相关依赖 <!--springboot程序测试依赖,如果是自动创建项目默认添加--> &l ...

  4. Linux Capabilities 入门教程:进阶实战篇

    原文链接:https://fuckcloudnative.io/posts/linux-capabilities-in-practice-2/ 该系列文章总共分为三篇: Linux Capabilit ...

  5. 窥探EasyMock(1)基础使用篇

    EasyMock的应用分为5步: 1. 使用 EasyMock 生成 Mock 对象: SomeInterface mockObj = createMock(SomeInterface.class); ...

  6. 《Genesis-3D开源游戏引擎-官方录制系列视频教程:进阶实例篇》

    注:本系列教程仅针对引擎编辑器:v1.2.2及以下版本 G3D进阶实例   第四课<2D编辑与脚本的统一入口> 使用G3D完成一个简单的类飞机大战游戏,介绍了G3D2d游戏制作的流程包括: ...

  7. Web前端性能优化进阶——完结篇

    前言 在之前的文章 如何优化网站性能,提高页面加载速度 中,我们简单介绍了网站性能优化的重要性以及几种网站性能优化的方法(没有看过的可以狂戳 链接 移步过去看一下),那么今天我们深入讨论如何进一步优化 ...

  8. 21-Python-Django进阶补充篇

    1. 路由部分补充 1.1 默认值 url: url(r'^index/', views.index, {'name': 'root'}), views: def index(request,name ...

  9. webrtc进阶-信令篇-之三:信令、stun、turn、ice

    webRTC支持点对点通讯,但是webRTC仍然需要服务端:  . 协调通讯过程中客户端之间需要交换元数据,    如一个客户端找到另一个客户端以及通知另一个客户端开始通讯.  . 需要处理NAT(网 ...

随机推荐

  1. Mysql 查看版本号

    1.mysql> status; 2.select version(); mysql> select version();+------------+| version() |+----- ...

  2. vimrc常用配置项

    设置行号 set nu 设置自动缩进 set autoindent 设置tab占n个字符 set tabstop=n 设置以空格代替tab(因为有部分场合不允许使用tab) set expandtab ...

  3. 嵌入值和序列化LOB

    Embedded Value 把一个对象映射成另一个对象表中的若干字段. OO系统中会有很多小对象(DataRange,Money).而作为表在DB中毫无意义. 默认想法是把一个对象保存为一个表. 但 ...

  4. leetcode 栈 括号匹配

    https://oj.leetcode.com/problems/valid-parentheses/ 遇到左括号入栈,遇到右括号出栈找匹配,为空或不匹配为空, public class Soluti ...

  5. poj2488 A Knight&&num;39&semi;s Journey

      A Knight's Journey Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 24840   Accepted:  ...

  6. 帮助中心 7D-我的私家设计师 设计师品牌服饰集成网 7D服装定制!

    帮助中心 7D-我的私家设计师 设计师品牌服饰集成网 7D服装定制! 关于我们

  7. ios UIApplocation 中APP启动方式

    iOS app启动的方式有哪些: 自己启动(用户手动点击启动) urlscheme启动(关于urlScheme的详解)http://www.cnblogs.com/sunfuyou/p/6183064 ...

  8. Linux下实现视频读取(三)---Buffer的准备和数据读取

    前面主要介绍的是:V4L2 的一些设置接口,如亮度,饱和度.曝光时间,帧数,增益.白平衡等.今天看看V4L2 得到数据的几个关键ioctl,Buffer的申请和数据的抓取. 1. 初始化 Memory ...

  9. matplotlib 与 seaborn 中出现中文乱码的解决方法

      Linux.Mac osx 系统中,出现 matplotlib 或 seaborn 绘图中有中文乱码的情形,可以考虑使用以下方式处理: 到 anaconda 的 matplotlib 中查看是否有 ...

  10. Window安装Erlang环境

    最近学习RabbitMQ,下载rabbitmq-server后,安装提示,需要erlang环境,接着又下载erlang安装包. 仅在这里提供下安装文件和环境配置方法. 1.rabiitmq-serve ...