分享
 
 
 

单元测试作业指导书(三)

王朝other·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

3.3.2 使用Junit测试EJB

3.3.2.1安装JUnit和JunitEE

你需要将junit.jar和junitee.jar加入到J2EE应用程序的CLASSPATH中。 一般地,将jar文件拷贝到服务器的根目录下的lib目录中就可以了。注意:该目录下的文件一般不能被动态加入,所以你需要重新启动应用服务器。

3.3.2.2准备一个EJB例子

你可以在JunitEE安装目录的example子目录下找到一个作为示例的EJB。你要先组织该示例,保证它是可以工作的。否则,注意发生了什么事情。你要编辑build.xml文件按照你计算机的具体情况更新文件中的路径。然后在build文件所在的目录下运行“ant”。

《something》

运行该例子的结果是得到名为junitee-example.ear的文件。该文件在名为out的子目录中。它包含一个简单的无状态EJB,一个使用了EJB的应用程序和测试web应用程序。这是一个标准的J2EE企业级的文档,可以安装在任何的应用服务器上。

如果你想手工的写出所有的部分,就删除example目录下的components/test-war子目录,本文下面的部分就是说明如何构建测试。

3.3.2.3创建目录结构

要创建一个Web应用程序测试,首先你要创建目录结构。创建下面的子目录:

example/javasrc/org/infohazard/test/

example/components/test-war/

example/components/test-war/WEB-INF/

本示例将测试用例放置在org.infohazard.test包中。如果你想测试包内的私有方法,则要将测试用例和要测试的class文件放置在同一个包中。由于绝大多数的测试发生在public接口层,所以你要考虑是不是要这样做。

3.3.2.4编写测试用例

测试用例是标准的JUnit测试用例。对于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"));

}

这些代码属于example/javasrc/org/infoazard/test/EinsteinTest.java

3.3.2.5使用 servlet来运行测试用例

下面是一个包括在junit.htmlui包中的servlet,但是你不可以直接使用它。你必须在你的web应用程序的WEB-INF/classes/下创建一个servlet,这个servlet来源于junit.htmlui.TestServletBase并且增加了下面的细节:

protected ClassLoader getDynamicClassLoader()

{

return this.getClass().getClassLoader();

}

使用这个servlet,我们使用动态的类载入器欺骗应用服务器,这样不必使用缺省的类载入。如果我们不这样做,每次改变的测试类文件都要重新启动web应用服务器。

如果你的应用程序服务器不能动态地重新载入修改过的class文件,这一步对你来说是没有帮助的。你不得不重新启动服务器,因为TestServletBase被声明为abstract类型。

3.3.2.6创建UI表格

<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>

将此保存为example/components/test-war/index.html文件。

3.3.2.7 创建web.xml配置描述器

Web应用程序必须有一个配置描述器,它提供了ejb-ref映射,使得"java:comp/env/ejb/EinsteinEJB" JNDI lookup生效,and so that the TestServlet gets mapped to some sort of URI.下面是web.xml的示例:

<?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.infohazard.servlet.TestServlet</servlet-class>

</servlet>

<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>

<servlet-mapping>

<servlet-name>JUnitEETestServlet</servlet-name>

<url-pattern>/TestServlet</url-pattern>

</servlet-mapping>

</web-app>

保存成:example/components/test-war/WEB-INF/web.xml。

3.4 单元测试完毕后,程序员将测试用例交与项目经理,由项目经理进行单元测试的检查,完成单元测试报告,对测试的情况进行总结说明。

注意:以上所述仅是测试J2EE的一种方式而已,我们还可以结合HttpUnit和Jakarta Cataus来进行J2EE项目的单元测试。这些完全借助于工具的方式还是有一定的缺陷,所以在去年的时候我根据XP中的Mock Object理论的一些指导,在HttpUnit的基础上编写了一套完全脱离J2EE运行环境(比如Weblogic等)的单元测试套件,以及压力测试和功能测试套件,在这一组工具的支持下才算作好了J2EE项目的单元测试。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有