它向您展示了如何使用一个开源测试框架,比如 JUnit 和 JUnitEE,通过在 IBM WebSphere Application Server 环境中使用 IBM Rational Application Developer 来进行 Java 和 EJB 应用软件的单元测试。
对 J2EE 组件进行单元测试的理由
当我们逐渐趋于一种分布式,多层次以及异构计算时,Java2 platform, Enterprise Edition (J2EE) 技术已经在开发基于组件的多层次,异构、分布式企业开发软件中变得十分普遍了。J2EE 技术已经集成了应用客户程序和小程序、Web 组件(JSP 和服务系统),以及 Enterprise JavaBeans(EJB) 组件。 Web 和 EJB 组件运行在一个应用软件服务器上,比如 IBM WebSphere Application Server 软件设备。就像人们使用 J2EE 技术来开发大型的、复杂的企业应用软件一样,各种不同的组件必然会紧密组合在一起来产生一个集成的应用软件。
在这些集成发生之前,必不可少的也是十分关键的是要对每个组件分别进行严格的单元测试。有效地对每个组件进行独立的单元测试可以减少错误,并有助于确保高质量的软件。有些开发人员或者测试人员可能会提出这样的争议:对J2EE 组件进行单元测试太浪费时间,需要高密度人力资源,并且易于出错。尽管深入研究各种 J2EE 组件的单元测试已经超出了这篇文章的范围,但是它将向您说明用JUnit 和 JUnitEE 测试框架对 EJB 组件进行单元测试是如何的简单而有效。
单元测试对于一个开发人员来说仅仅是编写代码的问题,它只发挥了被测试代码中一个很小且很特殊部分的功能。通常情况下,一个单元测试在特殊环境下只测试一些特殊的方法,因此它将白箱测试分为更广泛的种类。由于对 J2EE 组件进行单元测试的需求变得越来越明显,开发者们已经开始利用 JUnit 测试框架的优势来执行这些测试。JUnit 测试框架最初是4由 Enrich Gamma 和 Kent Beck 编写的,是一个对客户程序端的 Java 应用软件进行单元测试的框架。它有以下几个优点:
- 在 Java 中编写自动化和自我验证测试的简单框架
- 支持测试断言
- 测试集开发
- 提供及时的测试报告
JUnit 提供了一个基于测试的命令行,同时还提供了基于 AWT 和基于 Swing 的图形化测试报告机制。IBM Rational Application Developer 集成开发平台(IDE) 包括 JUnit。
然而,对于想要在应用软件服务器的容器中进行单元测试,以及想要以 HTML 或者 XML 的形式显示的开发人员来说,这个 JUnit 框架显得非常有限,且工作效率低下。这就是为什么 JUnitEE,一个开源开发组,要通过执行那个能够让您在应用软件服务器的容器里运行 JUnit 单元测试的 JUnitEE 测试框架来扩展 JUnit 能力的原因。
关于本系列文章
这个系列的三篇文章向您阐述了怎样利用 IBM 工具和技术,通过使用 JUnit 和 JUnitEE 测试框架来对 Java 应用软件,EJBs 和 Web服务进行单元测试。
- 第 1 部分(此篇文章)是以 JUnit 和 JunitEE 的概述开始的,然后展示了 JUnit 和 JUnitEE 在 Rational Application Developer IDE 中的用法,即如何对一个简单的 Java 应用软件和一个无状态的 session bean 进行单元测试。首先,我们介绍了 JUnit 和 JUnitEE 结构的简单概述,紧接着我们介绍了如何在 JUnit 和 JUnitEE 测试框架中开发,配置以及安装单元测试。最后,我们阐述了如何在应用软件服务器环境中布署和执行单元测试。
- 第 2 部分讨论了通过利用 Rational Application Developer 平台中的 JUnit 和 JUnitEE 测试框架对 Web 服务进行单元测试的问题,同时还讨论了如何在 IBM WebSphere Application Server 环境中布署和执行单元测试。
- 第 3 部分建立在第 2 部分的讨论的基础之上,提供了关于如何开发、部署,以及利用 JUnit 和 JUnitEE 测试框架在 Rational Application Developer 平台进行单元测试,然后如何在 IBM WebSphere Application Server 环境部署和运行测试的逐步指南。
必要条件
要想从这篇文章受益,您需要对 Web 服务和 Rational Application Developer 有基本的了解。IBM developersWorks Web 网站和这篇文章末尾部分的参考资源提供了介绍性的材料。
这个指南是利用 JUnitEE Version 1.10 和 Rational Application Developer Version V 6.0.2 的最终版本开发和测试的。针对这个例子您可以下载 Rational Application Developer 的试用版本和双重文件(请看资源)。
JUnit 测试框架
JUnit 现在是基于 Java 应用软件单元测试的非官方标准。尽管 Junit.org Web 网站提供了更多有压缩力的信息和指南(请参见参考资源),这个部分还是向您提供了 JUnit 测试框架的总的观点。包含 JUnit 的装配 APIs 的主要目的是使 Java 单元测试用例的编写更快更简单。最低限度,一个 JUnit 测试用例有一个如列表 1代码中所示的常用结构。
列表 1. JUnit 常用结构
1. Import junit.framework.TestCase; |
如列表 1第三行所示,所有的 Java 测试用例类都必须扩展junit.framework.TestCase ,它是 JUnit 的核心类。在第五行中,TestCase.setUp() 被重载,从而对测试下的对象进行初始化或者实例化。相反,在第九行中, TestCase.tearDown() 被重载,是释放任何定位资源的。在第十四行中,为了在日志中显示这个测试用例的名称,一个测试用例必须有一个可以将自变量传递到它的父类 (TestCase) 的专门的串参数构造器。
测试用例必须声明为public void,并且不带行参。此外,合适的是测试方法名称都有一个 "test" 前缀,这样测试运行人员就可以自动地执行所有的方法。最后,在第十八行的断言语句中,决定了这个测试用例的成功与失败。这个方法assert在这个特殊的测试情景下,将期望值与实际值进行了对比。您可以利用fail()方法强迫这个测试用例失败,例如您想要迫使一个操作暂停。JUnit 提供了一个额外的决定测试用例成功或者失败的机制。表格 1 显示了不同 assert 和 fail 方法签名的范例。
表格 1. Assert 方法
static void | assertEquals(boolean expected, boolean actual) Asserts that two booleans are equal. |
static void | assertFalse(boolean condition) Asserts that a condition is false. |
static void | assertNotNull(java.lang.Object object) Asserts that an object isn't null. |
static void | assertNotSame(java.lang.Object expected, java.lang.Object actual) Asserts that two objects refer to the same object. |
static void | assertNull(java.lang.Object object) Asserts that an object is null. |
static void | assertSame (java.lang.Object expected, java.lang.Object actual) Asserts that two objects refer to the same object. |
static void | assertTrue(boolean condition) Asserts that a condition is true. |
static void | fail(java.lang.String message) Fails a test with the given message. |
static void | failNotEquals (java.lang.String message, java.lang.Object expected, java.lang.Object actual) |
private static void | failNotSame (java.lang.String message, java.lang.Object expected, java.lang.Object actual) |
private static void | failNotEquals (java.lang.String message, java.lang.Object expected, java.lang.Object actual) |
private static void | failSame(java.lang.String message) |
(package private) static java.lang.String | format(java.lang.String message, java.lang.Object expected, java.lang.Object actual) |
注意:Assert 类包含许多不同的重载方法。下面是一个完全重载 Assert 类方法的完整列表,请看页面 JUnit.org(参见参考资源)。
JUnit 提供了一个 TestRunner 类来执行测试用例。其实测试用例的方法多种多样。测试报告是利用图形和文本来显示的。要获取最受欢迎的图形结果,可以利用 junit.swingui.TestRunner 和 junit.awtgui.TestRunner。其次受欢迎的基于文本的结果,可以 利用 junit.textui.TestRunner 来取代。
文章来源于领测软件测试网 https://www.ltesting.net/