`

easymock教程-使用MockControl

 
阅读更多

     在easymock中,通常我们使用一下的代码来创建mock对象

    IMyInterface mock = createStrictMock(IMyInterface.class);
    replay(mock);
    verify(mock); 
    reset(mock);

    如果需要mock多个对象,则需要如此:

    IMyInterface1 mock1 = createStrictMock(IMyInterface1.class);
    IMyInterface2 mock2 
= createStrictMock(IMyInterface2.class);
    IMyInterface3 mock3 
= createStrictMock(IMyInterface2.class);
    ...
    replay(mock1, mock2, mock3, ...);
    verify(mock1, mock2, mock3, ...); 
    reset(mock1, mock2, mock3, ...);

    不仅需要为每个mock对象增加create语句,而且需要为这个新增的mock对象更新replay()/verify()/reset()方法,比较啰嗦,而且容易出错。

 

    这种情况下可以考虑使用MocksControl来简化代码:

    IMocksControl mocksControl = createControl();
    IMyInterface1 mock1 
= mocksControl.createMock(IMyInterface1.class);
    IMyInterface2 mock2 
= mocksControl.createMock(IMyInterface2.class);
    IMyInterface3 mock3 
= mocksControl.createMock(IMyInterface3.class);
    ...
    mocksControl.replay();
    mocksControl.verify(); 
    mocksControl.reset();


    IMocksControl接口容许创建多个mock对象,这些创建的对象自动关联到这个mocksControl实例上,以后再调用replay()/verify()/reset()时就不需要逐个列举出每个mock对象。当mock对象比较多,尤其是原有代码上新增mock 对象时非常方便。

    事实上,Easymock.createMock()方法内部实现也是使用IMocksControl的:

    public static <T> T createMock(final Class<T> toMock) {
        
return createControl().createMock(toMock);
    }


    
public static IMocksControl createControl() {
        
return new MocksControl(MocksControl.MockType.DEFAULT);
    }

 

     除了使用方便外,使用IMocksControl还有另外一个重要的好处,就是如果使用strict control,则可以跨多个mock对象检测方法的调用顺序,具体的内容请参考本教程中的"strict和nice"一文。

 

分享到:
评论

相关推荐

    easymock详解教程

    #### 1.17 easymock教程-使用MockControl `MockControl`是easymock中用于创建和控制mock对象的一个类。 - **创建控制**:使用`MockControl.createControl`方法创建控制对象。 - **控制mock对象**:通过控制对象来...

    easymock2-javadoc-2.5.2-12.el7.noarch.rpm

    离线安装包,亲测可用

    easymock2-2.5.2-12.el7.noarch.rpm

    离线安装包,亲测可用

    powermock-easymock-junit-1.6.1.zip

    在"powermock-easymock-junit-1.6.1.zip"这个压缩包中,包含了这些工具的特定版本。 首先,我们来了解一下EasyMock。EasyMock是一个模拟框架,它允许开发者创建预期的交互(mock objects)并验证对象之间如何进行...

    powermock-easymock-junit-1.5.4.zip

    这个压缩包"powermock-easymock-junit-1.5.4.zip"很可能包含了这三个库的特定版本1.5.4,便于开发者下载和集成到自己的项目中。 首先,我们来详细了解一下PowerMock。PowerMock是一个扩展了其他模拟框架(如...

    easymock-2.5.2.jar

    easymock-2.5.2.jar easymock-2.5.2.jar 单元测试

    easymock-3.1.jar

    easymock需要用到的包,没有它不行,easymock-3.1.jar

    easymock-3.2.jar

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

    easymock-4.0-bundle

    EasyMock 是一套用于通过简单的方法对于给定的接口生成 Mock 对象的类库。它提供对接口的模拟,能够通过录制、回放、检查三步来完成大体的测试过程,可以验证方法的调用种类、次数、顺序,可以令 Mock 对象返回指定...

    EasyMock 3.1相关jar(所有)

    还在为EasyMock使用时出异常而烦恼? 本压缩包包含除了Junit4之外easyMock3.1所用到的所有相关jar包,junit4可自己导入eclipse自带的即可 本压缩包包括: asm.jar cglib.jar objenesis.jar等 其中asm与cglib已兼容,放心...

    rh-java-common-easymock3-javadoc-3.3-1.5.el7.noarch.rpm

    官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装

    rh-java-common-easymock2-javadoc-2.5.2-12.15.el7.noarch.rpm

    官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装

    rh-java-common-easymock3-3.3-1.5.el7.noarch.rpm

    官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装

    rh-java-common-easymock2-2.5.2-12.15.el7.noarch.rpm

    官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装

    4-EasyMock-Servlet.rar

    在“4-EasyMock-Servlet.rar”这个压缩包中,我们很可能是得到了一个关于如何使用EasyMock进行Servlet测试的教程或者示例代码。让我们详细探讨一下EasyMock与Servlet结合使用的相关知识点。 1. **EasyMock基本概念*...

    easymock-3.0.jar

    java运行依赖jar包

    easymock-3.1

    在这个压缩包中,我们找到了相关的文档和jar包,这些都是理解并使用EasyMock 3.1的关键资源。 首先,让我们深入了解一下EasyMock的基本概念。EasyMock是一个强大的工具,它通过创建代理对象来模拟接口的行为,这些...

    easymock-3.2.zip

    例如,使用`@Before`注解设置测试前的准备工作,使用`@Test`注解定义测试方法,并在其中使用EasyMock的API进行模拟和验证。 总之,EasyMock 3.2 提供了一个强大而灵活的模拟工具,帮助开发者编写高质量的单元测试,...

    easymock教程

    - **MockControl**:早期版本的Easymock使用MockControl来创建Mock对象。虽然现在更推荐使用Easymock的新API,但了解MockControl的基本用法仍然有助于理解Mock对象的工作原理。 以上内容是对Easymock教程的深入解析...

    easymockclassextension-3.1

    扩展架包啊...easymockclassextension-3.1

Global site tag (gtag.js) - Google Analytics