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

窥探EasyMock(2)进阶使用篇

阅读更多

1. 生成 Mock 对象

 

    如何创建一个需要严格遵守调用顺序的mock对象?

 

 

SomeInterface mockObj = createStrictMock(SomeInterface.class);
 

 

    如果你不想对每一个方法设定预期行为,对于这些非预期的方法调用你不想让EasyMock抛出AssertionError,你可以创建一个“nice”的mock对象,所有没有设定预期行为的方法会悄悄地返回一些空值(0, null或者false)。

 

 

SomeInterface mockObj = createNiceMock(SomeInterface.class);
 

 

    当然,如果你使用MockControl来创建Mock对象,都有相应的方法:createStrictControl和createNiceControl。(其实当你调用createMock等方法时,都生成了一个相应的control。)

 

2. 开关调用顺序检查

 

    如果在测试某处你想关闭strict模式,使用:

checkOrder(mockObj, false);
 

    当然,如果想重新开启,可以使用

checkOrder(mockObj, true);

 

3. 设定预期行为和输出

 

    期望一个方法始终返回期望的值,而不管调用次数:

 

expect(mockObj.someAction(1)).andStubReturn("one");
 

 

    下面的方法与此等价:

 

expect(mockObj.someAction(1)).andReturn("one").anyTimes();
 

 

    设定确定的调用次数:

 

expect(mockObj.someAction(1)).andReturn("one").times(3);
 

 

    设定调用次数在某个范围内:

 

expect(mockObj.someAction(1)).andReturn("one").times(3, 5);
 

 

    期望抛出异常:

 

expect(mockObj.someAction(1)).andThrow(someException);
 

 

4. 参数匹配

 

    任意参数:

 

expect(mockObj.someAction(anyInt())).andStubReturn("one");
 

 

    当然,相应的有anyObject(), anyChar()等等。

 

    在参数上应用逻辑操作:

 

expect(mockStatement.executeQuery(and(startsWith("select"), endsWith("order;")))).andReturn(mockResultSet);

 

    EasyMock提供大量其它的逻辑操作。

 

 

    自定义参数匹配器:

 

expect(mockStatement.executeQuery(SQLEquals("SELECT * FROM ORDER;"))).andReturn(mockResultSet);
 

 

 

private static String SQLEquals(String in) {
        reportMatcher(new SQLEquals(in));
        return in;
    }

    private static class SQLEquals implements IArgumentMatcher {

        private String expectedSql;

        public SQLEquals(String expectedSql) {
            this.expectedSql = expectedSql;
        }

        public boolean matches(Object actualSql) {
            if (actualSql == null && expectedSql == null)
                return true;
            if (actualSql.getClass() == String.class)
                return expectedSql.equalsIgnoreCase((String) actualSql);
            return false;
        }

         // others omited.
    }

 

5. 没有结束

 

    EasyMock还提供了太多其他的功能,大家还是查API吧。

分享到:
评论

相关推荐

    EasyMock介绍和使用

    【EasyMock的使用场景】 EasyMock适用于以下几种情况: 1. **依赖隔离**:当被测试类依赖于其他复杂或难以配置的外部服务或资源时,EasyMock可以通过模拟这些依赖,使测试环境更加可控。 2. **测试驱动开发(TDD...

    EasyMock 使用案例(含lib)

    2. **创建模拟对象**:使用`EasyMock.createMock()`方法创建模拟对象。这个对象将代表你要模拟的真实对象。例如,如果你有一个名为`MyService`的服务类,你可以创建一个`MyService`的模拟对象。 3. **定义行为**:...

    EasyMock与Mockito 使用

    EasyMock和Mockito是两个广泛使用的Java模拟框架,它们可以帮助开发者在隔离环境中测试代码,避免了依赖其他组件或服务的复杂性。本文将详细介绍这两个工具的使用方法、原理和差异。 **EasyMock** EasyMock是一个...

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

    EasyMock是Java编程中的一款强大的模拟框架,它允许开发者在单元测试中创建和控制...通过阅读《EasyMock使用简明手册》和解压后的easymock2.4.zip文件,开发者可以深入理解并掌握如何有效地使用EasyMock进行单元测试。

    EasyMock

    在实际使用EasyMock时,我们通常会遵循以下步骤: 1. **创建模拟对象**:首先,你需要通过`EasyMock.createMock()`方法创建一个模拟对象。例如,如果你有一个名为`MyInterface`的接口,你可以这样创建它的模拟对象...

    easymock的使用,含demo

    本文将对 EasyMock 的功能和原理进行介绍,并通过示例来说明如何使用 EasyMock 进行单元测试。 Mock 方法是单元测试中常见的一种技术,它的主要作用是模拟一些在应用中不容易构造或者比较复杂的对象,从而把测试与...

    Junit+EasyMock单元测试使用资料以及案例分析

    Junit和EasyMock是Java领域中广泛使用的两个工具,它们协同工作,提供了强大的单元测试能力。本文将深入探讨这两个工具的使用,并通过案例分析帮助你更好地理解和应用它们。 **Junit简介** JUnit是Java编程语言中最...

    Learning EasyMock3.0 By Official Example

    三、进阶使用 除了基本的模拟和预期,EasyMock 3.0 还提供了更高级的功能,如: - NiceMocks 和 StrictMocks:NiceMocks 允许未预期的调用返回默认值,而 StrictMocks 会抛出异常,确保测试的严谨性。 - EasyMock ...

    easyMock

    - **创建模拟对象**:你可以使用`EasyMock.createMock()`方法创建一个模拟对象,然后通过`EasyMock.replay()`进入“播放”模式,让模拟对象按照预期执行。 - **设置预期**:使用`expect()`方法设置对模拟对象的期望...

    easymock-3.2.zip

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

    easymock.jar,easymockclassextension.jar

    2. **创建模拟对象**:使用Easymock的`createMock`或`createNiceMock`方法创建模拟对象。 3. **设置预期**:通过`expect`方法设定模拟对象的方法调用预期。 4. **启动测试**:调用`replay`方法开始执行模拟。 5. ...

    转:EasyMock 单元测试

    这篇文档将深入探讨 EasyMock 的使用方法和原理,以便更好地理解和应用这一工具。 首先,让我们理解 EasyMock 的核心概念。EasyMock 允许开发者创建“mock”对象,这些对象在测试时代替实际依赖,以便我们可以控制...

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

    为了部署和使用EasyMock,你需要将源码导入一个支持Java开发的IDE(如Eclipse或IntelliJ IDEA),然后按照提供的说明进行编译和配置。 在部署流程中,一般步骤如下: 1. 安装Node.js:访问官网下载Windows安装包,...

    EasyMock 简介

    2. 回放(Replay):EasyMock 根据录制的行为,模拟 Mock 对象的行为。 3. 验证(Verify):EasyMock 验证 Mock 对象的行为是否符合预期。 EasyMock 的优点 使用 EasyMock,可以避免手动构造 Mock 对象的额外编码...

    easymock 3.0

    4. **回调方法**:除了预定义返回值,Easymock还支持使用`EasyMock.callback()`方法定义回调函数,使得mock对象的方法调用可以执行自定义逻辑。 5. **异常测试**:可以设置mock对象抛出预期的异常,以便测试错误...

    EasyMock 实例

    5. **验证行为**:测试完成后,使用`EasyMock.verify()`方法检查模拟对象是否按照预期被调用了。这有助于确保你的代码正确地使用了模拟对象。 ```java EasyMock.verify(myServiceMock); ``` 6. **清理资源**:...

    easymock资料和源代码实例

    2. **创建模拟对象**:使用`EasyMock.createMock()`方法创建模拟对象,如`MyInterface mockObject = EasyMock.createMock(MyInterface.class);` 3. **设置期望**:利用`EasyMock.expect()`方法设置模拟对象的行为,...

    EasyMock 使用方法与原理剖析

    本文将深入探讨EasyMock的使用方法及其工作原理,帮助开发者更好地理解和运用这一工具。 ### 1. EasyMock简介 EasyMock 是一个轻量级的模拟框架,它的核心功能是为测试提供假对象(mock objects),这些对象可以...

Global site tag (gtag.js) - Google Analytics