JUnitEE
翻译:slovenboy
邮件:slovenboy AT yahoo dot com dot cn
转载与发表声明:请保留译者信息并联系我
指南(Tutorial)
实现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映
射也是必须的。这是一个例子:
<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
来执行。几秒钟后,浏览器中将显示测试报告,说明成功的和失败的测试。
= 让你的工作更简单
注意
当对EJB做单元测试时需要紧记的几件事:
× 除非你(和任何项目中的人)非常细心的编写单元测试,否则很容易毁坏数据库。
可能你从未在一个产品系统(Production system)上运行测试,为了防止这样
做(和其他的安全原因)你不应在产品机器上启用测试Web应用。
× 对getter和setter方法进行测试或许是在浪费时间
参考
你或许会感兴趣和/或觉得有用的资源:
--------------------------------
后记
此文翻译有很多不足之处,欢迎批评指正:)