使用 JUnit 来测试 J2EE 应用程序仅仅是理想化的,因为应用服务器不能运行这些测试。而且,在测试用例中构建必需的客户端属性是一种枯燥的过程。幸运的是,JUnitEE 能够方便的用来测试你的 J2EE 应用程序。JUnitEE 是一个 JUnit TestRunner ,JUnit TestRunner 是使用 HTML/XML 作为用户界面表示的 servlet。 这意味着 JUnitEE 提供了 servlet 作为你的测试用例的入口点,并以 HTML/XML 的形式得到所需输出。如果你想自己动手开始工作,那么你需要开发 enterprise bean 并在服务器端部署它,以便你可以编写一个 JUnitEE 来测试它。好消息是我们已经为你开发好了 enterprise bean,你可以下载并在服务器中部署它。本文的目的是向你介绍如何使用 JUnitEE 测试 enterprise bean 的基本概念与步骤。
在运行测试之前,你应当已经安装了 IBM® Rational® Application Developer v6 (IRAD)。本文假设你对IRAD很熟悉。同时假设你对Java™、Java™ 2 平台、企业版(J2EE™)和 JUnit 有一定了解。
我们还假设你已经:
- 打开了 IRAD 的 J2EE 透视图
- 配置了 IRAD 中的服务器(IBM® WebSphere® Application Server v6.0)
下载 SimpleEJBEAR.zip(从 下载 部分),解压文件并在 IRAD 中安装 SimpleEJBEAR.ear(在内置 WebSphere 服务器中部署)。
EAR 包含 Enterprise JavaBeans™(EJB™)项目(SimpleEJB),并且包含了一个简单的 Session bean (SimpleBean),这个 Session bean 拥有一个返回字符串Hello World的被称为show()的方法。
打开 IRAD。选择一个新的工作空间 (sample.workspace)。如果还没选择,转换到J2EE 透视图。本文后半部分假设J2EE 透视图已被选择。
- 右键点击 Enterprise Applications。选择 Import > EAR file 如图1所示。
图1. 导入 EAR 文件
- 在导入窗口中,通过EAR file选项浏览(已下载的) SimpleEJBEAR.ear 文件。EAR Project 选项的名字应该是 SimpleEJBEAR,如图2所示。点击 Finish 按钮。
图2. 选择文件
- 在 EJB Projects 下右键点击SimpleEJB,选择 Run > Run on Server,如图3所示。
图3. 运行 EAR 项目
- 在S erver Selection 窗口中,选择所需服务器并且点击 Next,如图4所示。
图4. 选择服务器
- 确定 SimpleEJBEAR 在 Configured Projects 中,如图5所示,然后点击Finish。
图 5. 已配置的项目
当你点击 Finish时,SimpleEJBEAR 将被部署到服务器上,之后会自动打开通用测试客户端(UTC)。UTC 提供了通用的可视化界面来测试服务器端的应用程序(例如,在 EJB home objects 中创建方法)。本文关注于通过编程的方式测试服务器端的功能 - 而不是通过 UTC 完成的有限的单元测试 - 因此你可以关闭 UTC 窗口了。
创建简单的 Web 项目 (Dynamic Web Project)
创建名为SimpleJUnitEEWeb的动态 Web 项目
- 从主工具栏中,选择File > New > Dynamic Web Project,如图6所示。
图 6. 选择一个动态 Web 项目
- 在 New Dynamic Web Project 窗口中,将项目Name设为SimpleJUnitEEWeb。如果默认没有选择,那么点击Show Advanced 按钮(也就是,如果Hide Advanced按钮出现,则忽略这一步)。从组合选择框中选择 SimpleEJBEAR 作为EAR project 的值,点击 Next,如图7所示。
图7. 选择SimpleEJBEAR 项目
- 添加被依靠的的JAR 文件,并且点击Finish,如图8所示。
注意:如果你被提示切换到另一透视图,选择No(你需要留在 J2EE 透视图)
图 8. 添加被依赖JAR 文件
在 Dynamic Web Project(SimpleJUnitEEWeb)中创建 JUnit 类
把 junit.jar 和 junitee.jar(可在 参考资料 部分下载)放在 SimpleJunitEEWeb\WebContent\WEB-INF\lib 目录下 ,如图9所示(用 导入 或 复制 与 粘贴 将其放在lib目录中)。
图9. 在 lib 目录中放入文件
- 右键点击 SimpleJunitEEWeb 项目并选择New > Other,如图10所示。
图 10. 打开一个新的项目
- 在新窗口中点击 Java > JUnit > JUnit Test Case 然后点击 Next,如图11所示。
图 11. 启动测试用例
- 添加 JUnit Test 类详细信息:
- 在 Package 下输入
com.ibm.basic.bean.test - 输入
SimpleBeanTest作为 Class name - 选中 setup()、teardown() 和 constructor() 复选框
- 点击 Class Under Test 中的 Browse,如图12所示。
图12. 添加类详细信息
- 在 Class Under Test 窗口中输入 SimpleBean:
在 Qualifier 下,选择com.ibm.basic.bean 包并点击OK,如图 13 所示。
图 13. 选择需要测试的类( Class Under Test)
- 点击 Next,如图 14所示,
图 14. 下一步
- 在 SimpleBean下选择 show()方法,点击 Finish,如图 15所示。
图15. 完成
从SimpleJUnitEEWeb > Java Resources > Java Source > com.ibm.basic.bean.test 打开 JUnit 类 SimpleBeanTest
编辑如下所列的类(添加高亮显示的值),并 保存 文件。
/*
* Created on Nov 14, 2005
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package com.ibm.basic.bean.test;
import java.rmi.RemoteException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.rmi.PortableRemoteObject;
import com.ibm.basic.bean.Simple;
import com.ibm.basic.bean.SimpleHome;
import junit.framework.TestCase;
/**
* @author Sanjeev M Patil
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class SimpleBeanTest extends TestCase {
protected Simple simple = null;
/*
* @see TestCase#setUp()
*/
protected void setUp() throws Exception {
super.setUp();
Context jndiContext = new InitialContext();
Object einRef=jndiContext.lookup("ejb/com/ibm/basic/bean/SimpleHome");
SimpleHome home=(SimpleHome)PortableRemoteObject.narrow(einRef,SimpleHome.class);
this.simple = home.create();
}
/*
* @see TestCase#tearDown()
*/
protected void tearDown() throws Exception {
super.tearDown();
}
/**
* Constructor for SimpleBeanTest.
* @param arg0
*/
public SimpleBeanTest(String arg0) {
super(arg0);
}
public void testShow() throws RemoteException {
String show = simple.show();
assertEquals("Hello World",show);
}
}
|
在SimpleJUnitEEWeb > Web Content> WEB-INF下添加名为 testCase.txt 的文件
- 右键点击WEB-INF (SimpleJUnitEEWeb > Web Content> WEB-INF)。
选择New > Other,如图 16所示。
图 16. 添加文本文件
- 在新窗口中选择Simple > File,点击 Next,如图 17所示。
图 17. 选择文件
- 在File Name文本域中输入
testCase.txt并点击Finish,如图 18所示。
图18. 指定文件名
打开 testCase.txt 并添加
com.ibm.basic.bean.test.SimpleBeanTest, 然后 保存 文件。
你的文件应当如图19所示。
图 19. 修改过的文件
从SimpleJUnitEEWeb > Web Content> WEB-INF中双击打开 web.xml (Web 配置描述符) 文件
(它已存在于项目中)。以如下代码代替 Source 标签中的内容,然后保存文件。
<?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>SimpleJUnitEEWeb</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <servlet> <description> JUnitEE test runner</description> <display-name> JUnitEEServlet</display-name> <servlet-name>JUnitEEServlet</servlet-name> <servlet-class>org.junitee.servlet.JUnitEEServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>JUnitEEServlet</servlet-name> <url-pattern>/TestServlet/*</url-pattern> </servlet-mapping> </web-app> |
选择 SimpleJUnitEEWeb 项目。
右键点击这个项目,并选择 Run > Run on the Server, 然后点击 Finish。
IRAD 将使用 URL http://localhost:9080/SimpleJUnitEEWeb 启动 Web 浏览器。
编辑 URL 成为 http://localhost:9080/SimpleJUnitEEWeb/TestServlet
- 你应当在浏览器中看到如下信息。
图 20. TestServlet
- 点击Run all 按钮,你会看到如图21的结果。
图21. 结果
正如你能看到的,JUnitEE 使得应用服务器可以很容易的运行你的测试。
| 描述 | 名字 | 大小 | 下载方法 |
|---|---|---|---|
| Sample EJB project for this article | simpleejbear.zip | 52 KB | HTTP |
学习
- 您可以参阅本文在 developerWorks 全球站点上的 英文原文 。
- Eclipse.org:关于 Eclipse 开发的信息。
- IBM Rational Application Developer 产品页面:查找技术文档、教程、教育、下载与 Rational Application Developer 相关的产品信息。
- An Introduction to IBM Rational Application Developer 一书中含有使用 IRAD 的很好的指南。
获得产品和技术
- IBM Rational Application Developer: 从developerWorks 下载试用版本。
- 下载最新版本的 junit.jar。
- 下载最新版本的 junitee.jar。
- 查询 JUnitEE 的信息。
讨论
- Rational Software Architect、Software Modeler、Application Developer 与 Web Developer 论坛(英文):询问有关 Rational Application Developer 的问题。