- 浏览: 581560 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (188)
- java (14)
- web (14)
- web service (3)
- 杂谈 (14)
- Version Control (13)
- software test (30)
- linux (17)
- database (3)
- distributed storage and computing (1)
- ejb (7)
- project building (46)
- spring & IOC (2)
- Thread (2)
- xml (2)
- tool software (0)
- [网站分类]1.网站首页原创Java技术区(对首页文章的要求: 原创、高质量、经过认真思考并精心写作。BlogJava管理团队会对首页的文章进行管理。) (0)
- project manager (9)
- OSGI (1)
- nosql (3)
最新评论
-
sp42:
好搞笑
你懂不懂xml! (2) -
cherishmmo2004:
感觉你们都很牛掰,我们做的一个运维平台也是用karaf的,用k ...
基于osgi开发大型的企业应用 -
liubey:
“自作聪明”的使用了读写锁,其实只使用ReentrantLoc ...
编码最佳实践(4)--小心LinkedHashMap的get()方法 -
liubey:
你这个代码是sublist后仍然一直持有这个sub的引用,一般 ...
编码最佳实践(5)--小心!这只是冰山一角 -
xiegqooo:
初学maven(5)-使用assembly plugin实现自定义打包
虽然easymock中提供了大量的方法来进行参数匹配,但是对于一些特殊场合比如参数是复杂对象而又不能简单的通过equals()方法来比较,这些现有的参数匹配器就无能为力了。easymock为此提供了IArgumentMatcher 接口来让我们实现自定义的参数匹配器。
我们还是用例子来说话:
public void execute(Request request);
}
service类的execute()方法接收一个Request实例作为参数, Request是一个javabean:
private boolean condition;
private String value1;
private String value2;
//ignore getter and setter method
}
假设在我们的这个单独的测试案例中,我们有以下参数匹配逻辑: 如果condition为true,则只需要比较value1;如果condition为false,则只需要比较value2. 由于这个逻辑和默认的equals方法不一致,因此我们不能直接使用equals方法,只能实现自己的参数匹配器。
private boolean condition;
private String expectedValue;
private RequestMatcher(boolean condition, String expectedValue) {
this.condition = condition;
this.expectedValue = expectedValue;
}
@Override
public void appendTo(StringBuffer buffer) {
buffer.append("RequestMatcher expect(condition=");
buffer.append(condition);
buffer.append(" expectedValue=");
buffer.append(expectedValue);
buffer.append(")");
}
@Override
public boolean matches(Object argument) {
if (!(argument instanceof Request)) {
return false;
}
Request request = (Request) argument;
if (condition) {
return expectedValue.equals(request.getValue1());
} else {
return expectedValue.equals(request.getValue2());
}
}
public static Request requestEquals(boolean condition, String expectedValue) {
EasyMock.reportMatcher(new RequestMatcher(condition, expectedValue));
return null;
}
}
RequestMatcher 是我们定义的参数匹配器,matches()方法中是参数匹配逻辑的代码实现,appendTo()方法用于在匹配失败时打印错误信息,后面我们会演示这个方法的使用。然后是最重要的方法requestEquals(),在这里我们通过调用EasyMock.reportMatcher()告诉easymock我们要用的参数匹配器。
在测试案例中,我们和以往一样,先创建了mock对象,然后准备request对象作为测试数据。不同的是,我们没有使用easymock提供的参数匹配方法,而是通过service.execute(RequestMatcher.requestEquals(expectedCondition, expectedValue)); 来调用EasyMock.reportMatcher(),以创建我们自定义的参数匹配器并为它传入了两个必备的参数expectedCondition和expectedValue。
上面的测试案例可以顺利通过,我们的参数匹配器可以正常工作。然后我们来试试参数匹配不成功的情况
public void testConditionTrueFailure() {
final boolean expectedCondition = true;
final String expectedValue = "aaa";
Service service = EasyMock.createMock("service", Service.class);
Request request = prepareRequest(expectedCondition, "bbb", "ccc");
service.execute(RequestMatcher.requestEquals(expectedCondition, expectedValue));
EasyMock.expectLastCall();
EasyMock.replay(service);
service.execute(request);
EasyMock.verify(service);
}
注意在Request request = prepareRequest(expectedCondition, "bbb", "ccc")中,我们故意设置value为和期望的不同,当然这样测试案例就通不过了:
java.lang.AssertionError:
Unexpected method call service.execute(net.sourcesky.study.easymock.tutorial.IArgumentMatcherTest$Request@10ef90c):
service.execute(RequestMatcher expect(condition=true expectedValue=aaa)): expected: 1, actual: 0
at org.easymock.internal.MockInvocationHandler.invoke(MockInvocationHandler.java:45)
at org.easymock.internal.ObjectMethodsFilter.invoke(ObjectMethodsFilter.java:73)
at $Proxy4.execute(Unknown Source)
at net.sourcesky.study.easymock.tutorial.IArgumentMatcherTest.testConditionTrueFailure(IArgumentMatcherTest.java:72)
注意"service.execute(RequestMatcher expect(condition=true expectedValue=aaa)): expected: 1, actual: 0"这行,其中的"RequestMatcher expect(condition=true expectedValue=aaa)"是我们在appendTo()方法中构建出来的错误信息。appendTo()方法只在这个时候才被调用,用于生成可读性强的错误信息以便我们在失败时检查,因此不要疏忽了这个方法的实现。
发表评论
-
easymock教程-运行时返回值或者异常
2010-11-30 16:36 5692前面的教程中,我们看到easymock可以通过 ... -
easymock教程-改变同一个方法调用的行为
2010-11-30 17:06 3335在easymock中,对于mock对象的同一个方法,可 ... -
easymock教程-目录
2010-10-14 10:44 8441easymock是目前比较流行的java mock 工 ... -
easymock教程-单元测试中的主要测试对象和依赖
2010-10-14 14:01 3637在单元测试中,通常我们都会有一个明确的测试对象,我们 ... -
easymock教程-record-replay-verify模型
2010-10-15 14:50 7276record-replay-verify 模型容许记录 ... -
easymock教程-easymock的典型使用
2010-10-15 17:14 6184关于easymock的典型使用方式,在easym ... -
easymock教程-class mocking
2010-10-26 16:54 2796前面的例子中,mock的对象都是基于interface ... -
easymock教程-使用MockControl
2010-10-26 17:18 4434在easymock中,通常我们使用一下的代码来创建m ... -
easymock教程-strict和nice
2010-11-19 11:39 4134在easymock的使用过程中,当创建mock对象时, ... -
easymock教程-创建stub对象
2010-11-23 17:51 3149前面教程中有个章节讨论到mock和stub的概念差 ... -
easymock教程-mock的限制
2010-11-25 11:12 12211easymock并不是万能的,在使用easymock时 ... -
easymock教程-放宽调用次数
2010-11-29 15:55 3246对于mock对象上的mock方法的调用,easymoc ... -
easymock教程-命名mock对象
2010-11-29 16:34 3037在创建mock对象的时候,我们可以命名mock对象。 ... -
easymock教程-参数匹配
2010-11-29 18:57 7192easymock中提供了非常多的方法来实现参数匹配,基 ... -
easymock教程-partial class mocking
2010-11-30 14:23 2875easymock中提供对于类的mock功能,我们可以方 ... -
easymock教程-mock和stub
2010-08-26 15:26 5905作为测试的基本概念,在开发测试中经常遇到mock和st ... -
推荐升级easymock到新的3.0版本
2010-06-26 20:40 1835一直在使用easymock作为mock工具,但是eas ... -
loadrunner license设置问题
2008-02-18 11:35 7449初学loadrunner,今天准备用这个工具测试一下手头的一个 ... -
TestNG官方文档中文版(1)-介绍
2008-03-18 22:25 1772最近决定开始使用TestNG ... -
TestNG官方文档中文版(2)-annotation
2008-03-19 23:22 1885TestNG的官方文档的中文翻译版第二章,原文请见 http: ...
相关推荐
#### 1.15 easymock教程-自定义参数匹配器 easymock还支持用户自定义参数匹配器,以满足更复杂的匹配需求。 - **创建匹配器**:通过实现`org.easymock.IArgumentMatcher`接口来创建自定义参数匹配器。 - **注册...
离线安装包,亲测可用
离线安装包,亲测可用
在"powermock-easymock-junit-1.6.1.zip"这个压缩包中,包含了这些工具的特定版本。 首先,我们来了解一下EasyMock。EasyMock是一个模拟框架,它允许开发者创建预期的交互(mock objects)并验证对象之间如何进行...
这个压缩包"powermock-easymock-junit-1.5.4.zip"很可能包含了这三个库的特定版本1.5.4,便于开发者下载和集成到自己的项目中。 首先,我们来详细了解一下PowerMock。PowerMock是一个扩展了其他模拟框架(如...
easymock-2.5.2.jar easymock-2.5.2.jar 单元测试
easymock需要用到的包,没有它不行,easymock-3.1.jar
EasyMock主要是为测试提供模拟数据,比如你可以模拟HttpServletRequest。
EasyMock 是一套用于通过简单的方法对于给定的接口生成 Mock 对象的类库。它提供对接口的模拟,能够通过录制、回放、检查三步来完成大体的测试过程,可以验证方法的调用种类、次数、顺序,可以令 Mock 对象返回指定...
还在为EasyMock使用时出异常而烦恼? 本压缩包包含除了Junit4之外easyMock3.1所用到的所有相关jar包,junit4可自己导入eclipse自带的即可 本压缩包包括: asm.jar cglib.jar objenesis.jar等 其中asm与cglib已兼容,放心...
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
本文将详细讲解如何使用 Easymock 对 Servlet 进行单元测试,特别是针对 `HttpServletRequest` 中获取参数的方法 `getParamsNames()`。 在Servlet编程中,`HttpServletRequest` 是一个核心接口,它提供了处理HTTP...
- **自定义匹配器**:Easymock提供了默认的参数匹配机制,但在某些情况下可能需要更灵活的匹配规则,这时就可以使用自定义匹配器。 #### 四、最佳实践 ##### 1.16 命名Mock对象 - **命名Mock对象**:为了提高测试...
在“4-EasyMock-Servlet.rar”这个压缩包中,我们很可能是得到了一个关于如何使用EasyMock进行Servlet测试的教程或者示例代码。让我们详细探讨一下EasyMock与Servlet结合使用的相关知识点。 1. **EasyMock基本概念*...
java运行依赖jar包
EasyMock 3.1 是一个流行的Java模拟框架,它允许开发者在单元测试中模拟对象的行为,以便更好地控制测试环境并确保代码的正确性。在这个压缩包中,我们找到了相关的文档和jar包,这些都是理解并使用EasyMock 3.1的...
扩展架包啊...easymockclassextension-3.1