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介绍】 EasyMock是一个强大的Java库,用于创建模拟对象(Mock Objects),它使得单元测试变得更加简单。在测试过程中,模拟对象可以替代真实的依赖,这样我们就可以专注于测试单个方法,而不用担心其他...
EasyMock 是一个强大的Java模拟框架,它允许开发者在单元测试中创建和控制对象的行为,以模拟复杂的交互场景。这个框架的出现,极大地简化了对那些难以或无法直接实例化的类的测试,比如接口或者静态方法。EasyMock...
例如,`expect(mockObject.someMethod()).andReturn(someValue)`表示期望`someMethod()`被调用并返回`someValue`。 - **验证调用**:测试结束后,通过`EasyMock.verify()`方法验证模拟对象是否按照预期执行了所有...
Easymock是一个流行的Java单元测试框架,它允许开发者创建模拟对象来测试代码。这个框架使得测试更加简单,因为你可以模拟任何复杂的交互和行为,而无需实际运行依赖的组件。在给定的压缩包文件中,包含两个核心的...
3. **预定义返回值或异常**:使用`andReturn()`、`andThrow()`等方法设定模拟对象在特定调用后的反应。 4. **启动回放**:调用`EasyMock.replay()`开始回放模式,模拟对象开始按照之前设置的期望进行。 5. **执行...
EasyMock 3.2 是一个流行的开源Java模拟框架,它为开发者提供了强大的单元测试支持。在Java开发中,单元测试是验证代码独立模块正确性的关键步骤。EasyMock可以帮助程序员模拟对象的行为,使得测试过程更加可控,...
EasyMock.expect(myServiceMock.doSomething()).andReturn("Expected Result"); ``` 3. **启动模拟**:调用`EasyMock.replay()`方法开始执行模拟。在这个阶段,模拟对象的行为将按照你设定的期望进行。 ```java ...
EasyMock.expect(mockService.doSomething()).andReturn("Expected Result"); // 启动模拟 EasyMock.replay(mockService); // 执行测试 String result = mockService.doSomething(); assertEquals("Expected...
例如,`EasyMock.expect(request.getAttribute("name")).andReturn("alex");` 表示当调用 `getAttribute("name")` 时,Mock对象应返回 "alex"。 3. **Replay模式**:在设定完预期行为后,调用 `EasyMock.replay...
EasyMock是一款强大的模拟框架,主要用于Java单元测试。它允许开发者创建和控制对象的模拟行为,以便在测试过程中隔离被测试代码。在这个“EasyMock的安装与部署所需全部文件.zip”压缩包中,包含了在Windows环境下...
EasyMock主要是为测试提供模拟数据,比如你可以模拟HttpServletRequest。
【EasyMock介绍】 EasyMock是一款强大的Java模拟框架,它允许开发者在进行单元测试时创建和控制对象的行为。这个工具使得测试更加独立,可以隔离被测试代码与其他依赖的系统,从而提高测试的效率和质量。EasyMock的...
5. **扩展EasyMock**:EasyMock还可以与其它库结合,如`EasyMock.ClassExtender`用于创建扩展已有的类的模拟对象。 6. **Nice Mocks 和 Strict Mocks**:Nice Mocks默认允许所有未预期的调用,而Strict Mocks则会抛...
EasyMock.expect(myMock.someMethod()).andReturn(someValue).once(); ``` 3. **重新播放和验证**:在设置完期望后,需要使用`EasyMock.replay()`将mock对象切换到“播放”模式,然后执行测试代码。之后,使用`...
3. **设置期望**:利用`EasyMock.expect()`方法设置模拟对象的行为,例如`EasyMock.expect(mockObject.myMethod()).andReturn("expectedResult");` 4. **重放**:调用`EasyMock.replay(mockObject)`开始执行测试代码...
easymock 的使用方法简介 easymock 是一个开放源码的 mock 对象库,用于帮助开发者快速轻松地创建用于单元测试的 mock 对象。 EasyMock 使用动态代理,让开发者只需一行代码就能够创建任何接口的基本实现。 ...
EasyMock 简介 EasyMock 是一套用于通过简单的方法对于给定的接口生成 Mock 对象的类库,旨在解决单元测试中的 Mock 对象构建问题。以下是 EasyMock 的详细介绍: 单元测试与 Mock 方法 单元测试是对应用中的某一...
EasyMock是一个强大的开源Java模拟框架,它允许开发者在单元测试中创建和控制模拟对象。单元测试是软件开发过程中的一个重要环节,它确保代码的各个独立部分按预期工作。通过使用模拟对象,我们可以隔离被测试代码,...
EasyMock 是一个强大的开源工具,专门用于生成模拟对象(Mock Objects),在软件开发特别是单元测试领域,它扮演着至关重要的角色。这个工具的版本为2.5.2,提供了对Java编程语言的支持,使得开发者能够方便地创建和...