跳到导航
BEA Dev2Dev Oracle and BEA
首页 资源中心 dev2dev学堂 在线技术论坛 User Group CodeShare
dev2dev 首页 > 资源中心 > 专家Blog > 专家Blog文章
测试控件的简单方法

时间:2006-08-08
作者:Chris Hogue
浏览次数:
本文关键字:extensiontesting controlstight integrationdeclarativetest classtest caseinstantiate扩展测试控件紧密集成声明性测试类测试用例实例化JUnit
文章工具
推荐给朋友 推荐给朋友
打印文章 打印文章

  如今迅速转向的项目和一些迭代使得快速开发周期和测试过程方面的需求有所提高。在响应这些需求时,对应用程序的所有部分进行轻量级测试变得越来越重要。J2EE应用程序的各个部分在传统上是难以测试的,因为它们必须在容器(比如应用服务器)中运行。

  Workshop 8.1引入了控件的概念,控件是自定义的可重用组件,它们为业务逻辑和外部资源提供了一致的客户端界面。虽然在运行时功能强大,并且集成到IDE中时也表现良好,但实际上它们是EJB暗中创建的,因此它们难以在运行的应用服务器的上下文以外的地方测试。

  使用Workshop for WebLogic 9.2和Apache Beehive测试控件可以获得许多便利。有三项重要的更改,在组合使用这两种测试控件时,这些更改提供了生成应用程序所需的易于测试性:

  1. 这些控件现在是普通的Java对象,而不是EJB。
  2. Beehive提供了一个ControlTestCase作为junit.framework.TestCase的扩展。
  3. JUnit在Eclipse(这里指Workshop 9.2)中的紧密集成。

  因为控件不再是EJB,所以很容易在运行的服务器以外的地方测试它们。ControlTestCase使这一点变得更容易,因为它允许您使用声明性例示,并提供了对上下文的访问。最后,因为Eclipse/Workshop 9.2已经与JUnit紧密集成在一起,所以您只需要单击一下就可以完成测试,并且结果就在IDE中。

  让我们来看一看如何设置和运行测试。我们将创建一个非常简单的自定义控件和测试用例,以实现上述目标。然后将在Workshop 9.2中运行它,查看它看起来是什么样子。控件的内容不是非常有趣,但它具有演示如何设置和运行测试的用途。这些步骤假定用户基本了解控件和项目的创建和执行。如果您不熟悉这些概念,请参阅帮助系统中的教程。

创建Control Under测试

  我们将创建一个Utility项目来存放我们的控件,以便它们可以被应用程序中的几个模块使用。让我们从创建Utility项目开始,并将它命名为“SharedControls”。请接受其他所有默认值,并确保向导第二页上的Beehive Controls facet被选中。

  接下来在“src”目录中创建一个名为“sharedcontrols”的包。创建一个Custom Control并将它命名为EmployeeControl。然后添加一个名为getManagerNames方法,它看起来如下所示:

public String[] getManagerNames() {
 return new String[]{"Jane","Bob","Amy"};
}

  不要忘记将方法声明添加到控件接口中。

  此时,控件已准备就绪。

创建测试类

  我喜欢将测试代码放入源文件夹中,以便更好地组织它,并且在后面的打包生产期间更容易排除它们。如果您喜欢的话,甚至可以将测试放入完全独立的项目中,只需确保正确设置项目依赖关系即可。现在,将它们放在相同的项目中,然后继续后面的操作,通过定位到File > New > Other... > Java > Source Folder创建名为“src-test”的新的源文件夹。

  在“src-test”文件夹中创建一个名为“sharedcontrols.tests”的新包。现在将通过访问File > New > Other > Java > JUnit > JUnit Test Case创建测试类。注意,如果build路径中没有junit.jar,那么将为您提供该文件,以便添加它。将类命名为EmployeeControlTestCase,并确保它在sharedcontrols.tests包中。在Superclass字段中,确保它扩展了org.apache.beehive.controls.test.junit.ControlTestCase。

  小技巧:您不必键入完整的名称,只需键入‘ControlTestCase’并点击Ctrl-space来完成Superclass文本字段中的其余部分。

  测试字段中的类指向控件接口sharedcontrols.EmployeeControl。它看起来应该如下所示:

图1

  点击Next按钮。在Test Methods屏幕上单击Select All为控件(此时是唯一的控件)上的所有方法添加存根方法。在点击Finish之后,您将获得一个测试类,该类带有为控件设置的所有存根测试方法。

  您的项目现在应该如下所示:

图2

  测试用例本身看起来应该如下所示:

package sharedcontrols.tests;

import org.apache.beehive.controls.test.junit.ControlTestCase;

public class EmployeeControlTestCase 
    extends ControlTestCase {
    /*
     * Test method for   
     * 'sharedcontrols.EmployeeControl.getManagerNames()'
     */
    public void testGetManagerNames() {
    }
}

  要获得被实例化并包装的控件,只需添加一个@Control字段声明即可,如果要在web service或页面流中使用它,也可以使用此方法。测试类看起来应该如下所示:

package sharedcontrols.tests;

import org.apache.beehive.controls.api.bean.Control;
import org.apache.beehive.controls.test.junit.ControlTestCase;

import sharedcontrols.EmployeeControl;

public class EmployeeControlTestCase 
    extends ControlTestCase {

    @Control
    EmployeeControl employeeControl;
	
    public void testGetManagerNames() {
    }
}

  剩下的工作就是编写一些代码来测试控件。将代码添加到testGetManagerNames()方法中,这样测试用例现在看起来将如下所示:

package sharedcontrols.tests;

import org.apache.beehive.controls.api.bean.Control;
import org.apache.beehive.controls.test.junit.ControlTestCase;

import sharedcontrols.EmployeeControl;

public class EmployeeControlTestCase 
    extends ControlTestCase {

    @Control
    EmployeeControl employeeControl;
	
    public void testGetManagerNames() {
        String[] mgrs = employeeControl.getManagerNames();
        assertNotNull("Didn't find managers!", mgrs);
        assertTrue("Found wrong number of managers!", 
                    mgrs.length == 3);
    }
}

  注意,您能通过使用@Control字段符号只使用该控件,并且不必以编程方式亲自将其实例化。这就是ControlTestCase的美妙之处。通过扩展该类,您将继承其setUp()和tearDown()方法,这些方法将为您进行声明性的连接。

运行测试用例

  现在到了揭晓真相的时间了,让我们来运行测试。右击EmployeeControlTestCase并选择Run As > JUnit Test。如果一切正常,您应该看到JUnit视图出现,并且带有绿色的“所有测试都通过”的进度条。

图3

  最后,让我们看一下测试失败时的情形。将所期望的数组长度更改为2,并再次运行测试。JUnit视图看起来应该如下所示:

图4

  这就是该视图。注意,该测试决不能在已启动的服务器上进行,它是在纯JUnit环境中运行的。所使用的唯一特殊类是TestCase的一个标准子类。

  此外还要注意的是,设置测试用例非常简单。大多数设置是为了确保该测试用例在它自己的源文件夹中处于活动状态。通过扩展ControlTestCase并允许JUnit向导生成存根方法,我们实际上必须做的所有事情就是编写测试代码。

  所以现在编写您自己的控件时,不为它们编写测试是不可原谅的。

原文出处:http://dev2dev.bea.com/blog/hogue/archive/2006/07/testing_control_1.html

dot dot dot

dot
  作者其它文章
您对本文的评价
您对这篇文章的看法如何?
太棒了!5分 不错啊 4分 一般般 3分 有待提高 2分 不好 1分

   
相关产品
相关技术