EasyMock(官方资料整理)
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(官方资料整理)的更多相关文章
- 形形色色的软件生命周期模型(4)——MSF、实用型
摘要: 读大学时,我们曾经学习过不少软件生命周期模型,当时还不是很懂软件开发,你可能会觉得这些东西很新奇.在实际工作中,你会发现这些模型其实很难应用,与此同时你会接触到RUP.MSF等权威软件公司的生 ...
- FreeRtos——多任务
官方资料整理测试: 多任务和单任务几乎没有差别.只用多创建一个或多个任务,其他地方和单任务时相同. static void AppTaskCreate(void) { xTaskCreate(vTas ...
- Vue钩子函数生命周期实例详解
vue生命周期简介 Vue实例有一个完整的生命周期,也就是从开始创建.初始化数据.编译模板.挂载Dom.渲染→更新→渲染.卸载等一系列过程,我们称这是Vue的生命周期.通俗说就是Vue实例从创建到销毁 ...
- 整理iOS9适配中出现的坑(图文)
原文: http://www.cnblogs.com/dsxniubility/p/4821184.html 整理iOS9适配中出现的坑(图文) 本文主要是说一些iOS9适配中出现的坑,如果只是要 ...
- ORACLE关于索引是否需要定期重建争论的整理
ORACLE数据库中的索引到底要不要定期重建呢? 如果不需要定期重建,那么理由是什么? 如果需要定期重建,那么理由又是什么?另外,如果需要定期重建,那么满足那些条件的索引才需要重建呢?关于这个问题,网 ...
- 整理iOS9适配
整理iOS9适配 本文主要是说一些iOS9适配中出现的坑,如果只是要单纯的了解iOS9新特性可以看瞄神的开发者所需要知道的 iOS 9 SDK 新特性.9月17日凌晨,苹果给用户推送了iOS9正式版, ...
- ios_swift开发资源整理
目录 1.苹果官方资源 2.国内外视频网站推荐 3.中文文档 4.demo网站 5.开发工具推荐 6.国内外开发网站论坛 7.技术博客推荐 8.书籍推荐 9.第三方框架推荐 10.第三方发布平台 11 ...
- 小知识-为什么Linux不需要磁盘碎片整理
转载至:http://beikeit.com/post-495.html 简单译文: 这段linux官方资料主要介绍了外部碎片(external fragmentation).内部碎片(inter ...
- 歪国人整理的 2019 年 Java 开发路线图,值得参考!
许多Java开发人员都希望通过某种Java成长路线图,来解答有关:该学习哪些技术,使用哪些工具以及框架之类的问题. 在此,我将向大家展示一张根据自己多年经验总结出的路线图.该路线图在保持简单可行的 ...
随机推荐
- Resource is out of sync with the file system的解决办法
在eclipse中,启动server时报此错,是因为文件系统不同步造成的,解决方法有两个: (1)选中工程,右键,选择F5(手动刷新): (2)Window->Preferences->G ...
- Java文件解压
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import ...
- checkbox 全选、全不选、反选 插件
jquery.checkbox.js: ;(function($,window,document,undefined){ $.fn.check=function(mode){ mode= mode | ...
- C#获取ip的示例
界面 using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using ...
- WebBrowser自动点击链接 广告自动点击 Ads Auto Click
点击付费广告, 是目前比较流行的一种网络营销模式, 但是,如果你单纯的靠手工一个一个去点, 总觉得不划算 , 能不能实现自动的去点击呢? 答案是肯定的 .NET 里面的 WebBrowser, 可以 ...
- 如何使用 Java 测试 IBM Systems Director 的 REST API
转自: http://www.ibm.com/developerworks/cn/aix/library/au-aix-systemsdirector/section2.html 如何使用 Java ...
- treap完全版模板
这是我综合poj1442 3481 2352的treap操作 得到treap完全版模板.(经测AC) 结构体Tree { int key; //键值 int size; //该子树总节点个数 int ...
- Codeforces 383A - Milking cows
原题地址:http://codeforces.com/problemset/problem/383/A 题目大意:有 n 头奶牛,全部看着左边或者右边,现在开始给奶牛挤奶,给一头奶牛挤奶时,所有能看到 ...
- 函数xdes_get_offset
/********************************************************************//** Returns page offset of the ...
- poj1088
这题是dp还是dfs+记忆化?(其实好像没什么区别?) 用f[i,j]表示滑到(i,j)时之后最多能滑多远,依次穷举每一个起点(i,j)则 f[i,j]=max{f[i,j-1],f[i-1,j],f ...