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. 判断https

    判断https <script> if(window.location.protocol=='https:'){ window.location.href='http://e.abchin ...

  2. Jquery Mobile设计Android通讯录第二章

    本文是jQuery Mobile设计Android通讯录系统教程的第二篇,在上一篇教程中(http://publish.itpub.net/a2011/0517/1191/000001191561.s ...

  3. Android Application 深入分析

    http://blog.csdn.net/rain_butterfly/article/details/37598939

  4. Selenium启动本地firefox的profile

    ProfilesIni pi = new ProfilesIni();FirefoxProfile profile = pi.getProfile("default");WebDr ...

  5. BPDU与PortFast

    启用了BPDU Guard特性的端口在收到BPDU的时候会使端口进入err-disable状态,从而避免桥接环路.一般BPDU Guard是和PortFast结合使用,在端口上启用了PortFast之 ...

  6. Linux下gdb使用整理记录

    1.创建cpp文件:vim sourcefile.cpp 2.生成可执行文件:g++ -g sourcefile.cpp -o exename ------据说是要必须加上-g参数,否则不可调试 3. ...

  7. VS常用技巧

    VS2005代码编辑器的展开和折叠代码确实很方便和实用.以下是展开代码和折叠代码所用到的快捷键,很常用: Ctrl + M + O: 折叠所有方法 Ctrl + M + M: 折叠或者展开当前方法 C ...

  8. keyCode 与charCode

    键盘事件拥有两个属性,keyCode和CharCode,他们之间有一些不一样之处.keyCode表示用户按下键的实际的编码,而charCode是指用户按下字符的编码. IE下 keyCode:对于ke ...

  9. 20151007kaggle Titanic心得

    Titanic是kaggle上一个练手的比赛,kaggle平台提供一部分人的特征,以及是否遇难,目的是预测另一部分人是否遇难.目前抽工作之余,断断续续弄了点,成绩为0.79426.在这个比赛过程中,接 ...

  10. 预定义宏_GNUC_ _MSC_VER

    一.预定义__GNUC__宏 1 __GNUC__ 是gcc编译器编译代码时预定义的一个宏.需要针对gcc编写代码时, 可以使用该宏进行条件编译. 2 __GNUC__ 的值表示gcc的版本.需要针对 ...