关闭

(一)利用 Eclipse 进行单元测试

发表于:2007-7-13 16:25

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

 作者:Michael Nyika    来源:IBM

        您的传统代码是不是要求使用匹配的类测试套件才能针对其源代码库运行?针对此类目的,jMock 堪称是一个优秀的测试框架。但是,并不是所有情况都能够适用,尤其是必须以 jMock 不期望的方式构造对象时。为避免生成自定义模拟对象套件才能支持应用程序中的单元测试的麻烦,可以调整 RMock,与 jMock 无缝地结合使用,从而解决这一问题。
        模拟对象将模仿出于指导代码执行的惟一目的而编写的类的行为,以便它在测试时符合代码执行要求。最终,模拟对象数目可以随着应用程序类数目的增长而增长。使用 jMock、RMock 甚至 EasyMock 等框架有助于消除对物理的独立存在的模拟对象集的需求。
  EasyMock 框架的一个主要缺点是不能模拟具体类 —— 而只能模拟接口。在本文中,我将向您展示怎样使用 jMock 框架来模拟具体类和 接口,以及如何用 RMock 测试某些模糊的情况。
在 Eclipse IDE 中配置 jMock 和 RMock
  首先启动 Eclipse 集成开发环境 (IDE)。接下来,创建一个基本 Java™ 项目,稍后将把 JUnit、jMock 和 RMock Java Archive (JAR) 库导入到该项目中。将 Java 项目命名为 TestingExample。在 Java Perspective 内,选择 Project > Properties,然后单击 Libraries 选项卡,如下所示:

图 1. 在 Eclipse 中编辑 TestingExample 项目的属性

      

  当 JAR 文件位于 Java 类路径(即,已在 Eclipse 内配置的 Java 运行时环境(Java Runtime Environment,JRE))中时,请使用 Add JARs 按钮。      Add Variable 按钮适用于文件系统(本地或远程)中的资源(包括 JAR)所驻留的具体目录,并且通常可以引用此按钮。在必须引用 Eclipse 中默认的那些特定资源或为特定的 Eclipse 工作区环境配置的那些特定资源时,请使用 Add Library 按钮。单击 Add Class Folder,从已经配置为项目一部分的一个现有项目文件夹中添加资源。
  对于本示例,请单击 Add External JARs 并浏览到已下载的 jMock 和 RMock JAR。将其添加到项目中。当显示图 2 中所示的属性窗口时,请单击 OK。

图 2. 已添加到 TestingExample 项目中的 jMock 和 RMock JAR

                          
TestExample 源代码
  对于 TestExample 项目,您将使用来自四个类的源代码:
ServiceClass.java
Collaborator.java
ICollaborator.java
ServiceClassTest.java
  待测试的类将是 ServiceClass,该类包含了一个方法:runService()。服务方法将获取实现简单接口 ICollaborator 的 Collaborator 对象。具体的 Collaborator 类中实现了一个方法:executeJob()。Collaborator 是必须正确模拟的类。
  第四个类是测试类:ServiceClassTest(实现的性质已经被尽可能地简化)。清单 1 将显示第四个类的代码。

清单 1. 服务类的样例代码
               
public class ServiceClass {
 public ServiceClass(){
 //no-args constructor 
 }

 public boolean runService(ICollaborator collaborator){
 if("success".equals(collaborator.executeJob())){
  return true;
 }
 else
 {
  return false;
 }
}
}

  在 ServiceClass 类中,if...else 代码块是一个简单的逻辑分支,根据测试期望说明选取一条路经 —— 而不是另一条路经 —— 之后测试将失败(或通过)的原因。下面显示了 Collaborator 类的源代码。

清单 2. Collaborator 类的样例代码
               
public class Collaborator implements ICollaborator{
   public Collaborator(){
    //no-args constructor
   }
   public String executeJob(){
    return "success";
   }
}

  Collaborator 类也十分简单,它配有无参数的构造函数以及从 executeJob() 方法返回的简单 String。下面的代码显示了 ICollaborator 类的代码。
public interface ICollaborator {
    public abstract String executeJob();
}

  接口 ICollaborator 有一个必须在 Collaborator 类中实现的方法。
  以上代码就绪后,让我们继续检验怎样在各种场景中成功地运行 ServiceClass 类的测试。

                                                                                                                      

《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号