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

mock 测试

阅读更多
http://www.ltesting.net/html/40/n-161740.html 测试: http://www.ltesting.net/html/92/category-catid-92.html


jMock 框架介绍


总体上来说,jMock 是一个轻量级的模拟对象技术的实现。
   它具有以下特点: 可以用简单易行的方法定义模拟对象,无需破坏本来的代码结构表;
   可以定义对象之间的交互,从而增强测试的稳定性;可以集成到测试框架;易扩充;
   与大多数 MOCK 框架一样,我们可以在 IDE 中使用并进行开发。
  
   下载 jMock 在 jMock 官方网站,我们可以下载当前稳定版本 jMock2.5.1 。
    配置类路径 为了使用 jMock 2.5.1,您需要加入下面的 JAR 文件到当前的类路径。
    jmock-2.5.1.jar
   hamcrest-core-1.1.jar
   hamcrest-library-1.1.jar
图 1.

已添加到 TestingExample 项目中 jMock 的 JAR 文件 使用 jMock 模拟接口 我们首先必须引入 jMock 的类,定义我们的测试类,创建一个 Mockery 的对象用来代表上下文。上下文可以模拟出对象和对象的输出,并且还可以检测应用是否合法。

  import org.jmock.Mockery;
  import org.jmock.Expectations;
  public class AJmockTestCase {
     Mockery context = new Mockery();
}

  然后我们创建一个 calcService 去模拟 ICalculatorService 接口。
  在这里我们以 add() 方法为例,我们针对 add() 方法定义预期值
  assumedResult 。
  之后我们去调用 add(1,1) 时,就可以得到预期值。
// set up final
ICalculatorService calcService = context.mock(ICalculatorService.class);
final int assumedResult = 2;
// expectations
context.checking(new Expectations() {
   {
    oneOf (calcService).add(1, 1);
    will(returnValue(assumedResult)); }});

清单 3 和 4 分别显示了 ICalculatorService 和 AJmockTestCase 的代码。
清单 3. ICalculatorService 代码

public interface ICalculatorService {
   public int add(int a, int b);
}

清单 4.

AJmockTestCase 代码
  import org.jmock.Mockery;
  import org.jmock.Expectations;
public class AJmockTestCase {
    Mockery context = new Mockery();
    public void testCalcService() {
     // set up final
    ICalculatorService calcService = context .mock      (ICalculatorService.class);
final int assumedResult = 2;
// expectations context.checking(new Expectations() {
{
oneOf(calcService).add(1, 1);
will(returnValue(assumedResult));
}
});

System.out.println(calcService.add(1, 1));
} }

在 jMock 中,开发人员可以按照下面的语法定义预期值,从而实现更复杂的应用。

例如我们可以模拟底层驱动程序的输出,在上层应用程序中使用这些模拟数据。具体可以参考 jMock 的官方网站。
invocation-count (mock-object).method(argument-constraints); inSequence(sequence-name);
when(state-machine.is(state-name));
will(action);
then(state-machine.is(new-state-name));
----------------------------------------------------------------------


回页首 EasyMock 框架介绍 在实际开发中,不少开发人员也使用 EasyMock 来进行测试驱动开发。
EasyMock 具有以下的特点 在运行时 (runtime) 改变方法名或参数顺序,测试代码不会破坏;
支持返回值和异常;
对于一个或多个虚拟对象,支持检查方法调用次序;
只支持 Java 5.0 及以上版本;
与大多数 MOCK 框架一样,我们可以在 IDE 中使用并进行开发。

下载 EasyMock 在 EasyMock 官方网站,我们可以下载当前稳定版本
EasyMock2.4 。
配置类路径 为了使用 EasyMock 2.4,
您需要加入下面的 JAR 文件到当前的类路径。 easymock.jar
图 2.
已添加到 TestEasyMock 项目中 EasyMock 的 JAR 文件 使用 EasyMock 模拟接口
清单 5.
ILEDCard 代码

public interface ILEDCard { String getMessage(); void setMessage(String message); }

清单 6. LED 代码
public class LED { private ILEDCard ledCard; public LED(ILEDCard ledCard) { this.ledCard = ledCard; } public String ShowMesage() { return this.ledCard.getMessage(); } public void setMessage(String message) { this.ledCard.setMessage(message); } } 我们首先创建一个 Mock 的对象 mockLEDCard 来代表 LED 卡的行为,并初始化 LED 对象。 protected void setUp() throws Exception { super.setUp(); mockLEDCard = createMock(ILEDCard.class); led = new LED(mockLEDCard); } 之后我们对 ShowMessage 方法进行测试。 public void testGetWord() { expect(mockLEDCard.getMessage()).andReturn("This is a EasyMock Test!"); replay(mockLEDCard); led.ShowMesage(); verify(mockLEDCard); } 清单 7 显示了完整的代码。 清单 7. AEasyMockTestCase 代码 import static org.easymock.EasyMock.*; import junit.framework.TestCase; public class AEasyMockTestCase extends TestCase { private LED led; private ILEDCard mockLEDCard; protected void setUp() throws Exception { super.setUp(); mockLEDCard = createMock(ILEDCard.class); led = new LED(mockLEDCard); } protected void tearDown() throws Exception { super.tearDown(); } public void testGetWord() { expect(mockLEDCard.getMessage()).andReturn("This is a EasyMock Test!"); replay(mockLEDCard); led.ShowMesage(); verify(mockLEDCard); } public void testSetWord() { mockLEDCard.setMessage("Another test"); replay(mockLEDCard); led.setMessage("Another test"); verify(mockLEDCard); } }


通过上文对 jMock 和 EasyMock 的介绍,我们可以发现 jMock 可以灵活的定义对象的行为。例如 mock.expects(once()).method("method2").with( same(b1), ANYTHING ).will(returnValue(method2Result)); 这点在 EasyMock 里比较难于实现。
分享到:
评论

相关推荐

    mock 测试.pptx

    Mock 测试技术详解与 Fiddler AutoResponder 面板介绍 Mock 测试是一种软件测试方法,旨在模拟一些难以构造或获取的对象,以便进行测试。在测试过程中,Mock 对象可以帮助开发者更好地测试单元测试、集成测试和系统...

    基于python的mock测试数据练习

    本练习主要关注如何使用 `unittest.mock` 进行mock测试数据。 一、Mock对象的基本概念 Mock对象是模拟真实对象的一种工具,它可以在测试中替代真实的对象,以避免测试过程中对实际数据或外部服务的依赖。Mock对象...

    服务端Mock测试基础原理讲解

    服务端Mock测试是一种在软件开发中广泛应用的技术,它允许测试工程师在没有依赖服务端的真实环境或者服务尚未完成时进行测试工作。Mock技术通过模拟真实的服务端行为,使得测试人员能够在本地模拟各种网络交互,从而...

    iview.test测试demo包含拖拽排序 mock测试 iview模板

    Mock测试则是一种在真实后端服务未完成或不可用时,模拟后端数据来测试前端应用的方法。 本项目"iview.test测试demo"显然是一个基于Vue.js和Iview的实践示例,其中包含了拖拽排序的功能。拖拽排序是一种用户交互...

    支持http接口自由mock,可根据需要进行接口mock测试。

    对于“支持http接口自由mock,可根据需要进行接口mock测试”这一主题,我们可以深入探讨一下HTTP接口Mocking的概念、重要性以及如何使用工具如Moco进行实践。 HTTP接口Mocking是软件开发过程中的一个重要环节,特别...

    Squaretest半自动生成Mock测试

    "Squaretest半自动生成Mock测试"是一个针对这个需求的工具,它旨在简化单元测试的创建过程,特别是对于那些需要模拟(Mock)外部依赖的场景。 单元测试通常包括三个主要部分:测试前的设置(SetUp),实际的测试...

    我们用到的3种Mock测试方案​.docx

    【Mock测试方案详解】 在软件测试中,Mock测试是一种常用的技术,它允许我们在不依赖真实外部服务的情况下,模拟特定的依赖行为,以便更好地控制测试环境并确保测试的隔离性。以下是我们采用的三种Mock测试方案: ...

    基于Spring Boot和Dubbo的Dubbo Mock测试框架.zip

    # 基于Spring Boot和Dubbo的Dubbo Mock测试框架 ## 项目概述 Dubbo Mock测试框架是一个用于模拟和测试Dubbo服务的工具,支持多种测试模式和依赖管理。通过此框架,开发者可以方便地进行Dubbo接口的调试和测试,...

    mock测试框架中文文档

    mock测试框架中文文档

    mock测试简介及演示(源码+ppt)

    Mock测试是一种测试思想,那就是通过模拟的手段提高模块的可测试性。测试性不强的模块是软件工程质量的大敌。 本资源位mock测试的简介及简单示例,使用android mock objects实现了模拟android MediaStore的功能。

    详解Spring MVC如何测试Controller(使用springmvc mock测试)

    本文将详细介绍如何使用Spring MVC的Mock测试机制来直接测试Controller层代码,以便更好地隔离和验证控制器的行为。 **什么是Mock测试?** Mock测试是一种软件测试技术,它允许在不依赖真实环境或第三方组件的情况...

    用gomock进行mock测试的方法示例

    go-mock是专门为go语言开发的mock库,该库使用方式简单,支持自动生成代码,这篇文章主要介绍了用gomock进行mock测试的方法示例,感兴趣的小伙伴们可以参考一下

    VUE+mock测试+农业计算工具

    在java web应用中,进行用例实现时,很多情况难以模拟,比如数据库用例,如果直接通过连接数据库进行测试,导致用例对环境依赖很大,这时,可以通过mock技术可以模拟构造数据环境,从而进行单元测试,这里提供有实现...

    mock

    在Struts2中,有多种方式来实现Mock测试: 1. `junit怎么测试struts里的Action.htm`:这个文件名暗示了如何使用JUnit进行Struts2 Action的测试。JUnit是Java开发中最常用的单元测试框架,可以配合Mockito或EasyMock...

    googlemock库附使用教程

    本文将详细介绍如何利用Google Mock进行单元测试,以及如何设置开发环境和编写测试用例。 首先,我们来理解什么是Google Mock。Google Mock允许开发者创建模拟对象,这些对象可以模拟复杂的依赖关系,以便在测试中...

    Mock模拟测试使用

    ### Mock模拟测试使用 #### 一、Mock是什么 Mock是一种软件测试技术,它涉及使用模拟对象来代替实际对象,以简化测试过程中的依赖性管理。在软件开发中,特别是面向对象编程中,类通常与其他类有复杂的交互。为了...

Global site tag (gtag.js) - Google Analytics