CSDN博客

img roshui

JUnitEE【转】

发表于2004/7/6 15:16:00  1028人阅读

JUnitEE
 
翻译:slovenboy
邮件:slovenboy AT yahoo dot com dot cn
 
转载与发表声明:请保留译者信息并联系我
 
指南(Tutorial)
 
本指南将说明如何使用JUnitEE对EJB做单元测试。
所有的源代码在JUnitEE的分发(distribution)
的example目录中,也可以在线(http://www.junitee.org/tutorial/index.html)浏览。
 
实现EJB
 
在此指南中使用的EJB是一个简单的对两个数字求和的会话Bean。查看
org.junitee.ejb.einstein 包中的源代码来了解Bean中的工作机制。
addTwoNumbers方法有个小错误用于说明测试失败的效果,方法emc2仅
抛出一个异常来导致测试错误。
 
编写测试用例
 
测试用例是一个标准的JUnit“测试用例”(TestCase)。对于fixture,你
可以使用默认的JNDI InitialContext来获取EJB引用,如下:
 
protected void setUp() throws Exception {
  Context jndiContext = new InitialContext();
  Object einRef = jndiContext.lookup("java:comp/env/ejb/EinsteinEJB");
  EinsteinHome home =
      (EinsteinHome)PortableRemoteObject.narrow(einRef, EinsteinHome.class);
  this.ein = home.create();
}
 
测试方法象这样编写:
 
public void testSimpleAddition() throws RemoteException {
 String result = this.ein.addTwoNumbers("7", "10");
 assert(result.equals("17"));
}
 
测试用例的全部代码包含在示例中—查看org.junitee.ejb.einstein.test包。
 
创建前端Web表单
 
JUnitEEServlet执行由"suite"表单参数指定的测试用例,它可以出现多此。
使用一个简单的表单来开始测试:
 
<html>
<body>
<p>
 You may type in the name of a test suite:
 <br/>
 <form action="TestServlet" method="get" name="youTypeItForm">
  <input type="text" name="suite" size=60 />
  <input type="submit" value="Run" />
 </form>
</p>
<hr/>
<p>
 You may pick one or more of the following test suites:
 <br/>
 <form action="TestServlet" method="get" name="youPickItForm">
  <select name="suite" size="2" multiple>
   <option value="org.infohazard.test.EinsteinTest">
    org.infohazard.test.EinsteinTest
   </option>
   <option value="some.other.Test">
    some.other.Test
   </option>
  </select>
  <input type="submit" value="Run" />
 </form>
</p>
</body>
</html>
 
创建web.xml部署描述符

Web应用必须右部署描述符,它提供ejb-fef映射
这样“java:comp/env/ejb/EinsteinEJB” JNDI查询
才能工作。在web.xml中JUnitEEServlet和它的URL映
射也是必须的。这是一个例子:
 
<?xml version="1.0"?>
<!DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
        "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
<web-app>
  <display-name> Einstein Unit Tester Web Application </display-name>
  <servlet>
    <servlet-name>JUnitEETestServlet</servlet-name>
    <description>JUnitEE test framework</description>
    <servlet-class>org.junitee.servlet.JUnitEEServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>JUnitEETestServlet</servlet-name>
    <url-pattern>/TestServlet/*</url-pattern>
  </servlet-mapping>
  <ejb-ref>
    <ejb-ref-name>ejb/EinsteinEJB</ejb-ref-name>
    <ejb-ref-type>Session</ejb-ref-type>
    <home>org.infohazard.ejb.einstein.EinsteinHome</home>
    <remote>org.infohazard.ejb.einstein.Einstein</remote>
  </ejb-ref>
</web-app>
 
注意:Orion应用服务器在它的URL模式匹配算法中有一个缺陷,对JUnitEE
引起一些问题。如果你是用Orion,请修改部署描述符中的Servlet映射为
 
  <servlet-mapping>
    <servlet-name>JUnitEETestServlet</servlet-name>
    <url-pattern>/TestServlet*</url-pattern>
  </servlet-mapping>
 
打包用于测试的WAR文件
 
现在一切就绪可以打包用于测试的web应用了。必须放置
 × junit.jar 和 junitee.jar 到 WEB-INF/lib
 × 你的测试类到 WEB-INF/classes 或 包含测试类的jar文件到 WEB-INF/lib
 × 用于测试的前端表单到 index.html
 × web.xml 到 WEB-INF
最后,将所有文件使用jar命令打包为test.war并创建一个EAR文件来包含test.war和
包含Einstein Bean的EJB jar文件。
 
运行测试
 
部署EAR文件后,将你的浏览器指向test.war文件中的index.html文件并选择EinsteinTest
来执行。几秒钟后,浏览器中将显示测试报告,说明成功的和失败的测试。
= 让你的工作更简单
现在你已经了解如何创建一个包含JUnitEE servlet和你的测试类的.war文件。要创建一个war
文件需要几步,但幸运地,有一种自动执行这些步骤地方法:使用为Ant创建地JUnitEEWarTask。
看看Ant HowTo(http://www.junitee.org/antguide.html)学习更多与此任务相关地内容。
 
注意
 
当对EJB做单元测试时需要紧记的几件事:
    × 除非你(和任何项目中的人)非常细心的编写单元测试,否则很容易毁坏数据库。
      可能你从未在一个产品系统(Production system)上运行测试,为了防止这样
      做(和其他的安全原因)你不应在产品机器上启用测试Web应用。
    × 对getter和setter方法进行测试或许是在浪费时间
 
参考
 
你或许会感兴趣和/或觉得有用的资源:
 × 获取JUnit的信息,访问JUnit主页(http://www.junit.org)。
 × 了解极限编程,你可以阅读“极限编程:一般介绍”(http://www.extremeprogramming.org/
   然后访问XProgramming.com(http://www.xprogramming.com/)网站。
 × 一个极好的模式,奇闻和其他有用信息的资源是Portland Pattern Repostory
   (http://www.c2.com/cgi/wiki?WelcomeVisitors)网站。你可以从EjbUnitTest
   (http://www.c2.com/cgi/wiki?EjbUnitTest)页面或JunitEe(http://www.c2.com/cgi/wiki?JunitEe)
   页面开始。
 
--------------------------------
后记
此文翻译有很多不足之处,欢迎批评指正:)
0 0

相关博文

我的热门文章

img
取 消
img