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

关于土豆、番茄和easymock的争论

阅读更多
        今晚小组讨论,又说到了 easymock的测试问题,和前几次不同,这次easymock不再是鸡肋的角色,而倒是像一个碍手碍脚的包袱。全因为我们发现它需要手动配置许多“原材料”和“最后的大餐”。
       现在说说它的使用原理:比如说你要测试Object A,而Object A中有内部成员Object B,并且Object B实现了接口Interface C,而在Object A中只调用了Object B中实现了的Interface C的方法(这时应为现在的easymock只能够模拟接口类,对实体类无能为力)。那么就可以给Object A注入一个由easymock.createMock(Interface C.class);生成的mock对象来模拟ObjectB的行为。easymock会记录并核对objectB的方法调用种类、数量、*顺序,如果有错误或者和录制过程中的不同,就会报错。
       下面来说一说复杂一些的情况下easymock的使用方法,今天的争论也主要集中在这里。首先要明确几点:
  1. easymock不会实际调用它所mock的对象(即ObjectB)的方法实现,而是只通过线程捕捉、记录调用过程。
  2. 因为上面的原因,要对ObjectB有返回值的方法手动设定返回值,供被测试的objectA作为“原材料”使用,打个比方就是土豆和番茄。
  3. 时刻都要记住,你是在测试ObjectA,而不是ObjectB。因为一开始不太熟悉easymock的使用,经常会将注意力集中在那个mock对象上,但是反倒忽略了真正的被测试对象——Object A。
  4. easymock永远不会替你验证被测试方法的返回值正确与否!!这个需要你自己来构造一个,基于ObjectB的指定的返回值数据的、正确的预期返回值,来通过assertEquals()或者更复杂的方法来判断返回的结果是否正确。
明确了这几点,就知道我们需要做几件事:
  1. 准备各种原材料:mock对象的返回值、被测试方法的预期返回值
  2. 录制mock行为:预期你的mock对象会被调用到哪些方法,次数和顺序,按照你的需要选择不同层次的mock。通过expect() .andReturn() .times() 等方法对预期进行设置。还可以用EqXXX()等方法对入口参数进行相等或是更复杂的match匹配设定。
  3. replay,实际调用ObjectA的方法,取得返回值。
  4. verify,用easymock验证是否所有的方法调用都是按照计划进行的。
  5. assertEquals()判断ObjectA的返回值是否和自己手动建立的预期返回值相等,从而最终判断测试是否成功。
由于easymock是白盒测试,所以我们可以预期ObjectB的方法调用。
由于easymock不提供也不可能提供最终的返回值正确性验证,所以我们需要自己来进行验证,并且要预知返回值的正确结果。
注:*easymock提供三种mock对象:普通的mock、NickMock、StrictMock。三者对方法的检查不尽相同,只有strictMock会检查方法调用的顺序。

分享到:
评论

相关推荐

    jmock2.5.1和easymock3.0

    而JMock和EasyMock则是两种广泛使用的Java单元测试框架,它们允许开发者模拟对象的行为和交互,以便于测试复杂的系统。本资源包含JMock 2.5.1和EasyMock 3.0的库文件,使得开发者在进行单元测试时无需再四处寻找相关...

    EasyMock

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

    EasyMock介绍和使用

    以上就是关于EasyMock的基本介绍和使用方法。通过深入理解和熟练运用EasyMock,开发者可以在单元测试中更有效地控制和验证代码行为,提升软件质量。在实际项目中,结合IDE中的测试工具和自动化测试框架,如JUnit,...

    easymock.jar,easymockclassextension.jar

    在给定的压缩包文件中,包含两个核心的JAR文件:`easymock.jar`和`easymockclassextension.jar`。 `easymock.jar`是Easymock的基本库,包含了框架的主要功能。它提供了模拟接口和类的方法,以及验证这些方法是否被...

    easyMock

    EasyMock 是一个强大的Java模拟框架,它允许开发者在单元测试中创建和控制对象的行为,以模拟复杂的依赖关系。这个框架的出现使得测试更加简洁、独立,可以有效地验证代码的正确性,而无需运行实际的依赖服务或库。...

    easymock资料和源代码实例

    在压缩包中的"easymock"文件中,可能包含了Easymock的使用教程、源代码示例和相关文档,这些都是深入理解和学习Easymock的好资源。通过阅读这些材料,你可以更好地掌握如何在实际项目中运用Easymock进行单元测试,...

    easymock-3.2.zip

    1. **API文档**:这是EasyMock的接口文档,详细描述了各个类和方法的使用方法、参数和返回值,是开发者理解和学习EasyMock的关键资料。通过阅读API文档,你可以了解如何创建模拟对象,设置期望值以及验证行为。 2. ...

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

    在这个“EasyMock的安装与部署所需全部文件.zip”压缩包中,包含了在Windows环境下部署EasyMock所需的所有组件和步骤,包括Node.js、Redis、MongoDB以及EasyMock的源码。 1. **Node.js**:Node.js是一个基于Chrome ...

    EasyMock 实例

    EasyMock 是一个强大的Java模拟框架,它允许开发者在单元测试中创建和控制对象的行为,以模拟复杂的系统交互。这个框架的使用可以极大地提高测试的效率和覆盖率,因为它使得测试代码可以独立于实际的依赖进行执行。 ...

    easymock-3.2.jar

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

    easymock

    为了实现这一点,开发人员常常依赖一些强大的工具和框架来辅助他们的工作,其中EasyMock便是一款十分受欢迎的开源Java模拟框架。它在单元测试中的应用尤为广泛,特别是在进行后端系统开发时,可以帮助开发者创建模拟...

    PowerMock\EasyMock的相关资料和文档

    PowerMock和EasyMock是Java单元测试领域中的两个重要工具,它们允许开发者模拟和控制对象的行为,以便在测试中隔离复杂的依赖关系。EasyMock是基础,而PowerMock则在其基础上扩展了更多的功能,使得一些难以模拟的...

    EasyMock 简介

    EasyMock 简介 EasyMock 是一套用于通过简单的方法对于给定的接口生成 Mock 对象的类库...EasyMock 是一款功能强大且易用的 Mock 对象构建工具,可以帮助开发人员更方便的进行单元测试,从而提高软件的质量和可靠性。

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

    EasyMock是Java编程中的一款强大的模拟框架,它允许开发者在单元测试中创建和控制对象的行为,以便于测试代码的特定部分。本手册主要关注的是EasyMock的2.4版本,这是一个广泛使用的版本,包含了丰富的功能和改进。...

    easymock.jar包

    easymock.jar文件是Easymock框架的核心库,包含了所有必要的类和接口,使得开发人员可以直接在项目中引入并使用Easymock的功能。在给定的压缩包中,我们看到的是easymock-3.3版本,这是Easymock的一个稳定版本,包含...

    easymock3.2 (文档+源码+例子)

    这个压缩包包含的是Easymock的3.2版本,其中包括文档、源码和示例,对于学习和理解Easymock的工作原理以及如何在实际项目中使用它非常有帮助。 Easymock的主要功能是模拟(mock)Java接口的行为,使得测试可以独立...

    EasyMock 使用案例(含lib)

    7. **清理**:最后,记得使用`EasyMock.verify()`和`EasyMock.reset()`方法来清理模拟对象,确保每个测试用例之间不会相互影响。 在`EasyMockDemo`中,你可能会看到类似这样的代码结构: ```java import org....

    easymock 3.0

    Easymock 3.0 是一个...总结来说,Easymock 3.0是Java单元测试的重要工具,通过与JUnit的结合,能够有效地创建和控制mock对象,从而确保代码的正确性和稳定性。了解并熟练使用这些知识点,对于提升软件质量至关重要。

Global site tag (gtag.js) - Google Analytics