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

发表于:2007-10-30 12:13

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:郑闽睿 黄湘平    来源:网络转载

清单3:Mock 对象配置模板

<?xml version="1.0" encoding="UTF-8"? >
<mockConfig>
  <mockObjects>
    <mockObject name="Object name" mockedClass="Mock class or interface" />
    ......
  </mockObjects>
  <mockBehaviors>
    <mockBehavior mockObject=" Object name" method="Expected invocation method">
      <paramValues>
        <paramValue type="Parameter type" value="Parameter value" />
      </paramValues>
      <ctrlOptions>
        <ctrlOption option="Control option" value="Expected return value"
                times="Expected invocation times" />
        ……
      </ctrlOptions>
    </ mockBehavior>
    ......
  </ mockBehaviors>
</mockConfig>

  其中,<mockObjects> 部分将配置 Mock 对象的生成信息,<mockBehaviors> 部分将配置 Mock 对象的预期行为和输出。接下来,我们将对这两部分进行详细的说明。

根据配置文件生成 Mock 对象

  配置文件中所包含的 Mock 对象生成信息包含在 <mockObject> 元素当中。<mockObject> 元素包含两个属性 name 和 mockedClass,分别对应 Mock 对象的名称和对应的接口或类。Mock 对象的名称用于和配置文件中的其它部分相关联,而对应的接口和类用于 Mock 对象的生成。

  ResultSet 接口是每个 Java 开发人员都非常熟悉的接口。以 java.sql.ResultSet 接口为例,为其生成一个 Mock 对象 mockResultSet,可以在文件中配置为:

<mockObject name="mockResultSet" mockedClass="java.sql.ResultSet" />

  我们可以设想一下,在 EasyMock 中,如果我们需要创建 ResultSet 接口的一个 Mock 对象,这个过程应当是: IMocksControl mocksControl = EasyMock.createControl();
ResultSet mockResultSet = control.createMock(ResultSet.class);
 

 

  其中,IMocksControl 接口的实例 mocksControl 能生成并管理多个 Mock 对象。在 XMLEasyMock 中,我们为每个 Mock 对象创建一个 MockObject 类的对象,同时用一个 MockObjectController 对象来管理这些 Mock 对象。MockObjectController 类拥有一个 IMocksControl 成员变量,同时提供了 replay、verify 和 reset 方法,供外部调用(如下图):


图2:Mock 对象生成相关类图
Mock 对象生成相关类图

  EasyMockUtil 是提供给外部程序调用的工具类,loadConfig 方法用于读取配置文件,findMockObjectByName 方法可以通过 Mock 对象的变量名返回 Mock 对象。

配置 Mock 对象的预期行为

  接下来我们需要配置的是 Mock 对象的预期行为。Mock 对象的预期行为可以简单的理解为是 Mock 对象方法的调用以及该方法的预期输出。我们需要在文件中分别配置方法的预期调用和预期输出。

  Mock 对象的预期方法调用配置在 <mockBehavior> 元素中。每个 <mockBehavior> 元素都包含两个属性:mockObject 和 method 属性。mockObject 指定该行为对应的 Mock 对象的名称(Mock 对象必须在 <mockObject> 中定义过),method 属性则指定Mock对象中预期调用的方法。<mockBehavior> 的子元素<paramValues>包含了需要配置的方法所对应的参数列表。<paramValues>的每个子元素<paramValue>都包含两个属性:type和value,分别指定了参数类型和参数值。

  我们以 ResultSet 接口的 Mock 对象 mockResultSet 为例,如果我们期望对 getString 方法进行调用,可以配置以下信息:

清单4:Mock 对象生成信息

<mockBehavior mockObject="mockResultSet" method="getString">
  <paramValues>
    <paramValue type="int" value="1" />
  </paramValues>
  ......
</mockBehavior>

42/4<1234>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号