1.要求

EasyMock要求java1.5.0及以上版本。

Objenesis (2.0+)必须在classpath中来执行class mocking。

2.使用Maven

在Maven中心库中可以获取到EasyMock,仅仅需要将下面的依赖添加到你的pom.xml中。

<dependency>
<groupId>org.easymock</groupId>
<artifactId>easymock</artifactId>
<version>3.4</version>
<scope>test</scope>
</dependency>

3.模拟(Mocking)

第一个Mock对象

我们的第一个测试将检查移除一个不存在的文件是否并没有产生合作者通知(notification of the collaborator)。下面是没有定义Mock对象的测试。

import org.junit.*;

public class ExampleTest {

  private ClassUnderTest classUnderTest;

  private Collaborator mock;

  @Before
public void setUp() {
classUnderTest = new ClassUnderTest();
classUnderTest.setListener(mock);
} @Test
public void testRemoveNonExistingDocument() {
// This call should not lead to any notification
// of the Mock Object:
classUnderTest.removeDocument("Does not exist");
}
}

接口和被测试类定义如下:

public interface Collaborator {
void documentRemoved(String doc);
} public class ClassUnderTest {
private Collaborator collaborator; public void setCollaborator(Collaborator collaborator) {
this.collaborator = collaborator;
} public void removeDocument(String doc) {
collaborator.documentRemoved(doc);
}
}

对于许多使用EasyMock的测试,我们只需要使用一个org.easymock.EasyMock的方法的静态导入。

import static org.easymock.EasyMock.*;
import org.junit.*; public class ExampleTest {
private ClassUnderTest classUnderTest;
private Collaborator mock;
}

为了获得一个Mock对象,我们需要:
1.为我们想要模仿的接口创建一个Mock对象

2.记录下我们希望发生的行为

3.将Mock对象切换到重播状态。

第一个例子如下:

@Before
public void setUp() {
mock = mock(Collaborator.class); // 1创建
classUnderTest = new ClassUnderTest();
classUnderTest.setListener(mock);
} @Test
public void testRemoveNonExistingDocument() {
// 2 (we do not expect anything)记录(这个例子中,mock没有做任何方法调用)
replay(mock); // 3重播
classUnderTest.removeDocument("Does not exist");
}

在第3步激活之后,mock是Collaborator接口的Mock对象,不过这个接口没有做任何方法调用。这就意味着如果我们改变我们的classUnderTest去调用这个接口的方法的话,这个Mock对象会报出异常AssertionError

java.lang.AssertionError:
Unexpected method call documentRemoved("Does not exist"):
at org.easymock.internal.MockInvocationHandler.invoke(MockInvocationHandler.java:29)
at org.easymock.internal.ObjectMethodsFilter.invoke(ObjectMethodsFilter.java:44)
at $Proxy0.documentRemoved(Unknown Source)
at org.easymock.samples.ClassUnderTest.notifyListenersDocumentRemoved(ClassUnderTest.java:74)
at org.easymock.samples.ClassUnderTest.removeDocument(ClassUnderTest.java:33)
at org.easymock.samples.ExampleTest.testRemoveNonExistingDocument(ExampleTest.java:24)
...

EasyMock(官方资料整理)的更多相关文章

  1. 形形色色的软件生命周期模型(4)——MSF、实用型

    摘要: 读大学时,我们曾经学习过不少软件生命周期模型,当时还不是很懂软件开发,你可能会觉得这些东西很新奇.在实际工作中,你会发现这些模型其实很难应用,与此同时你会接触到RUP.MSF等权威软件公司的生 ...

  2. FreeRtos——多任务

    官方资料整理测试: 多任务和单任务几乎没有差别.只用多创建一个或多个任务,其他地方和单任务时相同. static void AppTaskCreate(void) { xTaskCreate(vTas ...

  3. Vue钩子函数生命周期实例详解

    vue生命周期简介 Vue实例有一个完整的生命周期,也就是从开始创建.初始化数据.编译模板.挂载Dom.渲染→更新→渲染.卸载等一系列过程,我们称这是Vue的生命周期.通俗说就是Vue实例从创建到销毁 ...

  4. 整理iOS9适配中出现的坑(图文)

    原文: http://www.cnblogs.com/dsxniubility/p/4821184.html 整理iOS9适配中出现的坑(图文)   本文主要是说一些iOS9适配中出现的坑,如果只是要 ...

  5. ORACLE关于索引是否需要定期重建争论的整理

    ORACLE数据库中的索引到底要不要定期重建呢? 如果不需要定期重建,那么理由是什么? 如果需要定期重建,那么理由又是什么?另外,如果需要定期重建,那么满足那些条件的索引才需要重建呢?关于这个问题,网 ...

  6. 整理iOS9适配

    整理iOS9适配 本文主要是说一些iOS9适配中出现的坑,如果只是要单纯的了解iOS9新特性可以看瞄神的开发者所需要知道的 iOS 9 SDK 新特性.9月17日凌晨,苹果给用户推送了iOS9正式版, ...

  7. ios_swift开发资源整理

    目录 1.苹果官方资源 2.国内外视频网站推荐 3.中文文档 4.demo网站 5.开发工具推荐 6.国内外开发网站论坛 7.技术博客推荐 8.书籍推荐 9.第三方框架推荐 10.第三方发布平台 11 ...

  8. 小知识-为什么Linux不需要磁盘碎片整理

      转载至:http://beikeit.com/post-495.html 简单译文: 这段linux官方资料主要介绍了外部碎片(external fragmentation).内部碎片(inter ...

  9. 歪国人整理的 2019 年 Java 开发路线图,值得参考!

      许多Java开发人员都希望通过某种Java成长路线图,来解答有关:该学习哪些技术,使用哪些工具以及框架之类的问题. 在此,我将向大家展示一张根据自己多年经验总结出的路线图.该路线图在保持简单可行的 ...

随机推荐

  1. 在Htmel中添加flash

    > >

  2. Java虚拟机的内存组成以及堆内存介绍

    一.java内存组成介绍:堆(Heap)和非堆(Non-heap)内存 按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配.堆是在 Java 虚拟机启 ...

  3. NSMutableString

    /*可变字符串,注意NSMutableString是NSString子类*/ //注意虽然initWithCapacity分配字符串大小,但是不是绝对的不可以超过此范围,声明此变量对 性能有好处 NS ...

  4. KMP算法的C++实现

    这个问题阮一峰老师讲的很清楚,链接 这里我只贴一下我的C++实现代码: #include <iostream> #include <cstring> #include < ...

  5. [Quick-x]cocos2dx下的彩色文本显示--RichLabel

    部分关键代码与思路参考 http://www.cocoachina.com/bbs/read.php?tid=218977&page=1 感谢原作者 i7909 代码下载地址:https:// ...

  6. sql 随笔 2015-07-02

    sql 自定义函数 --检查函数是否存在 if exists (select * from dbo.sysobjects where id = object_id(N'dbo.pTitleCase') ...

  7. [Codeforces673A]Bear and Game(水题,思路)

    题目链接:http://codeforces.com/contest/673/problem/A 题意:一个人看一个90分钟的节目,然后告诉你一些有趣的时刻.这个人假如在15分钟内还没有看到有趣的时刻 ...

  8. 网站常见问题及解决方法(div/css)

    18.<a> 在IE6,7 下面重新定义宽和高的代码:{  display:block; display:-moz-inline-stack; display:inline-block;  ...

  9. JAVA操作Excel 可配置,动态 生成复杂表头 复杂的中国式报表表头

    转载:开源社区http://www.oschina.net/code/snippet_1424099_49530?p=2代码] [Java]代码 该代码实现了Excel复杂表头的生成 基于sql se ...

  10. bzoj3272 3638

    好题,这道题可以用线段树来快速模拟费用流寻找最长增广路 这样修改怎么做也很显然了 type node=record s,lx,rx,mx,lp,rp,pb,pe:longint; end; ..*,. ...