`
eimhee
  • 浏览: 2159780 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

EasyMock and IllegalStateException

    博客分类:
  • JAVA
 
阅读更多

When writing a portlet and trying to unit test it, you definitly need somekind of mock implementation. I chose to use EasyMock 2.2 for that purpose because I think its easier to use. I will not explain nor defend this decision.

I have been using EasyMock for some time now, and every now and then I stumble over the problem IllegalStateException problem. Sometimes this is caused by not having 'replay'ed the mocks, but now its different. The stack look s like this:

java.lang.IllegalStateException: 2 matchers expected, 1 recorded.
at org.easymock.internal.ExpectedInvocation.createMissingMatchers(ExpectedInvocation.java:41)
at org.easymock.internal.ExpectedInvocation.(ExpectedInvocation.java:33)
at org.easymock.internal.ExpectedInvocation.(ExpectedInvocation.java:26)
at org.easymock.internal.RecordState.invoke(RecordState.java:64)
at org.easymock.internal.MockInvocationHandler.invoke(MockInvocationHandler.java:24)
at org.easymock.internal.ObjectMethodsFilter.invoke(ObjectMethodsFilter.java:45)
This exception is thrown when executing request.setAttribute(MetaInfoPortlet.BEAN_ATTR, EasyMock.anyObject());.

So why is this excpetion being thrown at me? The message gives a hint, 2 matchers expected, recorded 1. So it lacks a matcher...

If I now change the code to request.setAttribute(EasyMock.matches(MetaInfoPortlet.BEAN_ATTR), EasyMock.anyObject());, it works fine. Now why is this? If I change the code to request.setAttribute(MetaInfoPortlet.BEAN_ATTR, "something");, it works as well, but now I get the following:
java.lang.AssertionError:
Unexpected method call setAttribute("bean", {test=Let's see if this tst value comes through?}):
  setAttribute("bean", "something"): expected: 1, actual: 0
So it looks like the you either have to supply your mock with fixed values or you have to supply it with matchers, as it says in EasyMocks documentation: "If you would like to use matchers in a call, you have to specify matchers for all
arguments of the method call.
"

Bottom line: read the documentation.
分享到:
评论

相关推荐

    EasyMock and PowerMock入门PPT

    【EasyMock介绍】 EasyMock是一个强大的Java库,用于创建模拟对象(Mock Objects),它使得单元测试变得更加简单。在测试过程中,模拟对象可以替代真实的依赖,这样我们就可以专注于测试单个方法,而不用担心其他...

    EasyMock

    EasyMock 是一个强大的Java模拟框架,它允许开发者在单元测试中创建和控制对象的行为,以模拟复杂的交互场景。这个框架的出现,极大地简化了对那些难以或无法直接实例化的类的测试,比如接口或者静态方法。EasyMock...

    easyMock

    例如,`expect(mockObject.someMethod()).andReturn(someValue)`表示期望`someMethod()`被调用并返回`someValue`。 - **验证调用**:测试结束后,通过`EasyMock.verify()`方法验证模拟对象是否按照预期执行了所有...

    easymock.jar,easymockclassextension.jar

    Easymock是一个流行的Java单元测试框架,它允许开发者创建模拟对象来测试代码。这个框架使得测试更加简单,因为你可以模拟任何复杂的交互和行为,而无需实际运行依赖的组件。在给定的压缩包文件中,包含两个核心的...

    easymock2.4+EasyMock使用简明手册.pdf

    3. **预定义返回值或异常**:使用`andReturn()`、`andThrow()`等方法设定模拟对象在特定调用后的反应。 4. **启动回放**:调用`EasyMock.replay()`开始回放模式,模拟对象开始按照之前设置的期望进行。 5. **执行...

    easymock-3.2.zip

    EasyMock 3.2 是一个流行的开源Java模拟框架,它为开发者提供了强大的单元测试支持。在Java开发中,单元测试是验证代码独立模块正确性的关键步骤。EasyMock可以帮助程序员模拟对象的行为,使得测试过程更加可控,...

    EasyMock 实例

    EasyMock.expect(myServiceMock.doSomething()).andReturn("Expected Result"); ``` 3. **启动模拟**:调用`EasyMock.replay()`方法开始执行模拟。在这个阶段,模拟对象的行为将按照你设定的期望进行。 ```java ...

    EasyMock 使用案例(含lib)

    EasyMock.expect(mockService.doSomething()).andReturn("Expected Result"); // 启动模拟 EasyMock.replay(mockService); // 执行测试 String result = mockService.doSomething(); assertEquals("Expected...

    Easymock学习笔记

    例如,`EasyMock.expect(request.getAttribute("name")).andReturn("alex");` 表示当调用 `getAttribute("name")` 时,Mock对象应返回 "alex"。 3. **Replay模式**:在设定完预期行为后,调用 `EasyMock.replay...

    EasyMock的安装与部署所需全部文件.zip

    EasyMock是一款强大的模拟框架,主要用于Java单元测试。它允许开发者创建和控制对象的模拟行为,以便在测试过程中隔离被测试代码。在这个“EasyMock的安装与部署所需全部文件.zip”压缩包中,包含了在Windows环境下...

    easymock-3.2.jar

    EasyMock主要是为测试提供模拟数据,比如你可以模拟HttpServletRequest。

    EasyMock介绍和使用

    【EasyMock介绍】 EasyMock是一款强大的Java模拟框架,它允许开发者在进行单元测试时创建和控制对象的行为。这个工具使得测试更加独立,可以隔离被测试代码与其他依赖的系统,从而提高测试的效率和质量。EasyMock的...

    EasyMock单元测试例子

    5. **扩展EasyMock**:EasyMock还可以与其它库结合,如`EasyMock.ClassExtender`用于创建扩展已有的类的模拟对象。 6. **Nice Mocks 和 Strict Mocks**:Nice Mocks默认允许所有未预期的调用,而Strict Mocks则会抛...

    easymock 3.0

    EasyMock.expect(myMock.someMethod()).andReturn(someValue).once(); ``` 3. **重新播放和验证**:在设置完期望后,需要使用`EasyMock.replay()`将mock对象切换到“播放”模式,然后执行测试代码。之后,使用`...

    easymock资料和源代码实例

    3. **设置期望**:利用`EasyMock.expect()`方法设置模拟对象的行为,例如`EasyMock.expect(mockObject.myMethod()).andReturn("expectedResult");` 4. **重放**:调用`EasyMock.replay(mockObject)`开始执行测试代码...

    easymock 的使用方法简介

    easymock 的使用方法简介 easymock 是一个开放源码的 mock 对象库,用于帮助开发者快速轻松地创建用于单元测试的 mock 对象。 EasyMock 使用动态代理,让开发者只需一行代码就能够创建任何接口的基本实现。 ...

    EasyMock 简介

    EasyMock 简介 EasyMock 是一套用于通过简单的方法对于给定的接口生成 Mock 对象的类库,旨在解决单元测试中的 Mock 对象构建问题。以下是 EasyMock 的详细介绍: 单元测试与 Mock 方法 单元测试是对应用中的某一...

    EasyMock.jar

    EasyMock是一个强大的开源Java模拟框架,它允许开发者在单元测试中创建和控制模拟对象。单元测试是软件开发过程中的一个重要环节,它确保代码的各个独立部分按预期工作。通过使用模拟对象,我们可以隔离被测试代码,...

    easymock-2.5.2工具 下载

    EasyMock 是一个强大的开源工具,专门用于生成模拟对象(Mock Objects),在软件开发特别是单元测试领域,它扮演着至关重要的角色。这个工具的版本为2.5.2,提供了对Java编程语言的支持,使得开发者能够方便地创建和...

Global site tag (gtag.js) - Google Analytics