`
xitong
  • 浏览: 6401673 次
文章分类
社区版块
存档分类
最新评论

easymock中遇到方法调用次数错误的问题

 
阅读更多
一个测试,测试两个动作见*1,*2

public void testVoteCheck() throws Exception {

//*1 测试找不到结果,返回true
mockVoteDao.getVote("192.168", 1);

EasyMock.expectLastCall().andReturn(null);

EasyMock.replay(mockVoteDao);

boolean result = voteService.voteCheck(vote);

assertTrue(result);

//*2 测试找到结果但小于半小时
mockVoteDao.getVote("192.168", 1); //xxxxxxxx

EasyMock.expectLastCall().andReturn(vote);

EasyMock.replay(mockVoteDao);

boolean result = voteService.voteCheck(vote);

assertFalse(result);


}

结果报错
java.lang.AssertionError:
Unexpected method call getVote("192.168", 1):
getVote("192.168", 1): expected: 1, actual: 1 (+1)
at org.easymock.internal.MockInvocationHandler.invoke(MockInvocationHandler.java:29)
at org.easymock.internal.ObjectMethodsFilter.invoke(ObjectMethodsFilter.java:45)

在运行完 //xxxxxxxx行就出错了
意思是说预计mockVoteDao.getVote("192.168", 1);只调用一次,结果调用了两次,
也就是说一旦一个mock对象被激活,并且没有被设定调用多次的话,会抛错

但如果用以下方式就没错
/**
* 测试保存投票前的检查
*
* @author weip
* @time 2006-5-12 12:10:00
* @throws Exception a
*/
public void testVoteCheck() throws Exception {

// 测试找不到结果,返回true
mockVoteDao.getVote("192.168", 1);

EasyMock.expectLastCall().andReturn(null);

EasyMock.replay(mockVoteDao);

boolean result = voteService.voteCheck(vote);

assertTrue(result);

}

/**
* 测试找到结果但小于半小时
* @author weip
* @time 2006-5-12 15:16:23
* @throws Exception a
*/
public void testVoteCheck2() throws Exception {
mockVoteDao.getVote("192.168", 1);

EasyMock.expectLastCall().andReturn(vote);

EasyMock.replay(mockVoteDao);

boolean result = voteService.voteCheck(vote);

assertFalse(result);
}

即将一个方法拆成两个就没错,因为这个时候两个测试中mockVoteDao是不同的对象
分享到:
评论

相关推荐

    easymock 的使用方法简介

    可以针对任何用途配置这些 mock,从方法签名中的简单哑参数到检验一系列方法调用的多调用测试。 例如,假设我们有一个 ExchangeRate 接口,它用于获取汇率数据。我们可以使用 EasyMock 来创建一个 mock 的 Exchange...

    EasyMock

    如果调用次数或参数不匹配,EasyMock将抛出异常,表明测试失败。 EasyMock与其他模拟框架如Mockito相比,更注重预定义行为,而Mockito则更倾向于使用“行为验证”和“记录-重放”模式。尽管如此,EasyMock依然在很...

    easyMock

    - **预期**:EasyMock允许设置预期,即预先定义模拟对象如何响应特定的方法调用,包括方法的参数、返回值以及调用次数。 **2. EasyMock的使用** - **创建模拟对象**:你可以使用`EasyMock.createMock()`方法创建一...

    EasyMock介绍及安装方法含安装方法和所有需要的软件包

    验证功能:EasyMock 提供了一些方法来验证模拟对象的行为,例如检查方法调用次数、顺序等。 灵活性:EasyMock 允许用户自定义模拟对象的返回值,或者抛出异常等,使得测试更加灵活。 使用 EasyMock 进行单元测试的...

    EasyMock 使用方法与原理剖析

    EasyMock 是一个强大的Java模拟框架,它允许开发者在单元测试中创建和控制对象的...在实际开发中,利用EasyMock进行单元测试,能够有效地提升代码质量,减少因为依赖问题导致的错误,从而提升软件的稳定性和可靠性。

    EasyMock介绍和使用

    测试结束后,EasyMock会验证代理对象的调用是否符合预设,如果不符合,就会抛出一个期望未满足的错误。 【EasyMock使用方法】 1. **创建模拟对象**:首先,需要通过`EasyMock.createMock()`方法创建模拟对象,指定...

    EasyMock 简介

    它提供对接口的模拟,能够通过录制、回播放三步来完成大体的测试过程,可以验证方法的调用种类、次数、顺序,可以令 Mock 对象返回指定的值或抛出指定异常。通过 EasyMock,我们可以方便的构造 Mock 对象从而使单元...

    转:EasyMock 单元测试

    在 EasyMock 中,你可以通过扩展 `EasyMock` 类或使用 `createMock()` 方法来创建 mock 对象。例如,如果你有一个名为 `MyService` 的接口,你可以这样创建它的 mock 实例: ```java MyService myServiceMock = ...

    easymock.jar,easymockclassextension.jar

    Easymock Class Extension库解决了这个问题,使你可以创建模拟这些方法的对象,从而在测试中控制它们的行为。 使用Easymock进行单元测试时,你通常需要以下步骤: 1. **导入库**:在你的测试类中,你需要引入...

    easyMock2.2.doc

    在`testAddAndChangeDocument`方法中,我们展示了如何设置方法的调用次数。通过`expectLastCall().times(3)`,我们指定了`mock.documentChanged`方法应该被调用三次。而在`testVoteForRemoval`方法中,我们则演示了...

    easymock.jar包

    而期望则是定义模拟对象应该如何被调用,例如,指定哪个方法会被调用,调用的次数,以及调用时的参数等。 使用Easymock进行单元测试的步骤大致如下: 1. **创建模拟对象**:使用Easymock的`createMock()`方法,...

    easymock教程

    - **动态修改行为**:通过在测试中多次调用`when()`方法,可以在不同的调用之间改变方法的行为。 ##### 1.15 自定义参数匹配器 - **自定义匹配器**:Easymock提供了默认的参数匹配机制,但在某些情况下可能需要更...

    easymock教程.pdf

    * 使用easymock的anyTimes方法可以放宽调用次数的限制。 ### 参数匹配 * 使用easymock的eq方法可以匹配参数的值。 ### Partial Class Mocking * Partial Class Mocking:是指模拟类的部分方法。 * 使用easymock...

    easymock-2.5.2工具 下载

    3. **期望设定**:你可以设置对模拟对象方法调用的期望,比如期望某个方法在测试期间被调用的次数,或者在特定顺序下被调用。 4. **验证**:在测试结束时,EasyMock会验证模拟对象的行为是否符合预设的期望,如果不...

    EasyMock.jar

    6. **回调(Callback)**:EasyMock还支持在模拟对象的方法被调用时执行自定义代码,通过`expectLastCall().doSomething()`。 7. **静态方法模拟**:虽然EasyMock主要针对实例方法的模拟,但它也提供扩展机制(如...

    EasyMock 使用方法与原理剖析.rar

    - **期望顺序(Ordering)**:可以设置方法调用的顺序,确保在测试中方法的调用顺序正确。 ### EasyMock与Mockito的比较 Mockito是另一款流行的模拟框架,它在易用性和功能上有所增强,如更简洁的API、更强大的...

    EasyMock介绍及安装方法

    当在测试过程中一些复杂的对象生成相当麻烦、费时或者根本无法生成时,可以用模拟的对象来代替真实的对象。 EasyMock 可以 mock 接口和 java 类,但是 class mocking 有一些限制: 不能 mock 类的 final 方法。如果 ...

Global site tag (gtag.js) - Google Analytics