`
sharewind
  • 浏览: 156672 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论
阅读更多

1. 什么是Mock Object(模拟对象)。

 

我个人理解就是这些对象可能尚未实现,我们可以创建一个fake 的对象来实现行为与特性。

好比我们要编写一个声控电灯的程序一样,我们手头没有暂时没有灯泡设备。

那么我们便构建一个模拟的灯泡,方便对程序可以正常编写逻辑。

如:

 

灯泡的接口:

 

public interface  ILight{

 

     boolean open();

 

     boolean  close();

 

}

 

灯泡的模拟对象

 

public interface MockLight implements ILight{

 

     boolean open(){

         System.out.println("open the MockLight");

         return true;

    }

 

     boolean  close(){

         System.out.println("close the MockLight");

         return true;

    }

}

 

 

通过这个模拟的灯泡,我们可以来实现遇到声音时,打开灯泡的程序

 

public  class  SoundController{

 

   public static boolean receiveSound(){

       return true;

  }

 

 

    public static  void main(String[] args){

        ILight light = new MockLight();

      

        while(true){

              if(SoundController.receiveSound() == true){

                    light.open(); 

              }

         }

    }

 

   

 

}

 

 

2. 为什么要使用模拟对象。

 

jmock通过mock对象来模拟一个对象的行为,从而隔离开我们不关心的其他对象,使得单元测试的编写变得更为可行,也使得TDD变得更为方便,自然而然的,也就成为敏捷开发的一个利器。 (引用自:主题:jmock2.5基本教程

 

3. 如何使用jmock

 

官方的入门示例: http://www.jmock.org/jmock1-getting-started.html

(以下是摘要)

 

 

订阅者接口

 

interface Subscriber {
    void receive(String message);
}

 

针对订阅者的单元测试

 

import org.jmock.*;

class PublisherTest extends MockObjectTestCase {
    public void testOneSubscriberReceivesAMessage() {
    }
}

 

 

接下来,我们获取一个Subscriber 的模拟对象,并添加到发布者的订阅列表中。

 

Mock mockSubscriber = mock(Subscriber.class);
Publisher publisher = new Publisher();
publisher.add( (Subscriber)mockSubscriber.proxy() );

final String message = "message";

 

编写模拟对象的模拟行为,期待调用一次receive 方法 且参数为message

 

mockSubscriber.expects(once()).method("receive").with( eq(message) );

 

执行我们想要的测试方法:

 

publisher.publish(message);

 

当测试执行完成时,jMock 会判断 Subscriber 是否会像 expects 方法中编写的那样被调用,如果与expects期待的方法不匹配,便使测试失败。

 

完整的测试代码

 

import org.jmock.*;

class PublisherTest extends MockObjectTestCase {
    public void testOneSubscriberReceivesAMessage() {
        // set up
        Mock mockSubscriber = mock(Subscriber.class);
        Publisher publisher = new Publisher();
        publisher.add((Subscriber) mockSubscriber.proxy());
        
        final String message = "message";
        
        // expectations
        mockSubscriber.expects(once()).method("receive").with( eq(message) );
        
        // execute
        publisher.publish(message);
    }
}

 

 

 

4. jmock 的实现原理。

 

   

待续。。。

 

 

参考

官方的入门文档:http://www.jmock.org/jmock1-getting-started.html

使用模拟对象(Mock Object)技术进行测试驱动开发 http://www.ibm.com/developerworks/cn/java/j-lo-mockobject/

EasyMock 使用方法与原理剖析 http://www.ibm.com/developerworks/cn/opensource/os-cn-easymock/

主题:jmock2.5基本教程 http://www.iteye.com/topic/770438

MockObjects的选择:EasyMock与JMock的比较

使用配置文件定义 Mock 对象,创建高效、灵活的测试用例 

源文档 <http://www.ibm.com/developerworks/cn/opensource/os-cn-easymock2/index.html>

 

 

分享到:
评论

相关推荐

    JMock学习文档分享

    JMock 是一个强大的Java模拟框架,它允许开发者在单元测试中模拟对象的行为,以便更好地测试代码的特定部分。本文将深入探讨JMock的核心概念、使用方法以及如何在实际项目中应用。 一、JMock简介 JMock是针对Java...

    Jmock2.6 jar包

    **Jmock2.6 Jar包**是Java编程领域中用于单元测试的重要库,它提供了模拟对象的功能,使得开发者能够在测试代码时对复杂依赖关系进行控制和隔离。在本文中,我们将深入探讨Jmock2.6的核心特性、使用场景以及如何在...

    JMock

    **JMock 深度解析** JMock 是一个流行的开源测试框架,专为Java开发者设计,用于模拟对象的行为,特别是在单元测试中。它允许程序员在不依赖真实对象的情况下测试代码,提高了测试的效率和隔离性。这篇详尽的讨论将...

    jmock2.5.1.zip

    通过这个文档,开发者可以学习如何创建和配置模拟对象,设置和验证期待,以及如何在JUnit等测试框架中集成jMock。 首先,创建模拟对象通常需要使用`Mockery`类,这是jMock的核心类。开发者可以通过`context.mock...

    JMock学习资料

    **JMock学习资料** 在软件开发中,单元测试是确保代码质量的重要环节。JMock是一款强大的Java模拟框架,专门用于进行单元测试。它允许开发者在测试中模拟对象的行为,以便隔离被测试代码并精确控制其运行环境。本...

    jmock cookbook 资源整合

    通过《JMock Cookbook》的学习,开发者可以了解到如何在实际项目中有效地利用JMock进行测试驱动开发(TDD)和行为驱动开发(BDD),提高代码质量,减少回归错误,并提升开发效率。这本书详细讲解了各种场景下的最佳实践...

    jmock-2.5.1-javadoc

    《jMock 2.5.1:模拟对象与单元测试的艺术》 jMock是一个强大的Java模拟框架,它在软件开发的单元测试阶段扮演着至关重要的角色。jMock 2.5.1是该框架的一个版本,它提供了丰富的功能,帮助开发者创建虚拟对象,...

    JMOCK使用文档

    - `Jmock学习文档.docx`:更深入的JMock教程,可能包括高级用法和最佳实践。 - `Junit使用.ppt`:可能是一个关于JUnit基本用法和如何与JMock结合的演示文稿。 通过学习这些文档,开发者可以更全面地了解如何有效...

    jmock-2.6.0-jars

    【jmock-2.6.0-jars】这个压缩包主要包含了`jmock`库的2.6.0版本的jar文件以及相关的源代码。`jmock`是Java平台上的一个模拟框架,它允许开发者在单元测试中创建和控制对象的行为,以便能够隔离测试并精确地指定期望...

    JMOCK 帮助 网页 文档

    **JMock 概述** JMock 是一个Java平台上的单元测试框架,专门用于模拟对象,以便在测试过程中控制和验证对象的行为。它基于EasyMock库,但提供了更强大的功能,尤其是对于处理复杂交互和顺序的场景。JMock使得...

    jmock-1.2.0-jars.zip

    《JMock:模拟对象软件测试工具的深度解析》 在软件开发过程中,单元测试是确保代码质量的关键步骤。为了有效地进行单元测试,我们常常需要模拟(mock)对象,以便隔离测试目标并控制其行为。这就是JMock的作用所在...

    jmock-1.2.0-jars.rar

    《JMock 1.2.0 - 模拟与测试的艺术》 JMock 是一个流行的 Java 开源库,专门用于创建和管理模拟对象,以便在单元测试中隔离被测代码。这个压缩包“jmock-1.2.0-jars.rar”包含的是 JMock 1.2.0 版本的 jar 文件,它...

    jmock-1.2.0.jar

    Maven-Central / jmock / jmock-cglib 1.2.0 Maven-Central / org.apache.activemq / activemq-ra 5.2.05.1.0 Maven-Central / org.apache.maven.shared / maven-dependency-tree 1.21.1 Maven-Central / org.apache...

    jmock2.5.1和easymock3.0

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

    jmock jar包及doc文档

    学习并熟练掌握JMock,将极大地提升单元测试和集成测试的效率和质量。 总之,JMock是Java开发中的一个重要工具,特别是在进行单元测试和集成测试时。结合Spring的测试模块,我们可以更有效地编写和执行测试,确保...

    软件测试资料集合,jtest,jmock

    通过这个样本,开发者可以学习如何使用`TestNG`来编写和组织测试用例。 `jtester-0.8.2.zip`可能是一个辅助工具或者一个测试框架,用于简化测试过程。它可能包含了一些自动化测试工具或者测试管理功能,帮助开发者...

    jmock-1.0.1.jar

    jmock-1.0.1.jar jmock-1.0.1.jar

Global site tag (gtag.js) - Google Analytics