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. 格式化输出星期几 C#

    string Today = DateTime.Now.ToString("yyyy-MM-dd dddd",new System.Globalization.CultureInf ...

  2. CURL: CURLE_COULDNT_CONNECT问题探究

    摘自::  存储系统研究: socket connect error 99(Cannot assign request address) 这是最近使用libcurl写http服务的压力测试的时候遇到的 ...

  3. web医疗影像浏览demo及地址

    各种web影像浏览demo及地址1.WPACS http://demo.dayisheng.com 帐号密码 cc dd(http://demo.dayisheng.com/wpacs33.aspx? ...

  4. c#枚举自定义,用于数据绑定。 z

    [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property | AttributeTargets.Enum)] public ...

  5. javascript防止SQL注入

    <SCRIPT language="javascript">function Check(theform){  if (theform.UserName.value== ...

  6. PHP.ini 配置文件解析

    [PHP] ;;;;;;;;;;;;;;;;;;;; About php.ini   ;;;;;;;;;;;;;;;;;;;;; PHP's initialization file, generall ...

  7. 一步步实现Promise

    最近在https://github.com/ThoughtWorksInc/rest-rpc上工作,遇到了一个scala隐式转换的问题,简单的说是要实现这么个东西: implicit def json ...

  8. 记一个社交APP的开发过程——基础架构选型(转自一位大哥)

    记一个社交APP的开发过程——基础架构选型 目录[-] 基本产品形态 技术选型 最近两周在忙于开发一个社交App,因为之前做过一点儿社交方面的东西,就被拉去做API后端了,一个人头一次完整的去搭这么一 ...

  9. mysql执行update报错1175解决方法

    mysql执行update报错 update library set status=true where 1=1 Error Code: 1175. You are using safe update ...

  10. 使用HttpClient实现文件的上传下载

    1 HTTP HTTP 协议可能是现在 Internet 上使用得最多.最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源. 虽然在 JDK 的 java.net ...