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

本文介绍了使用Junit测试EJB的方法。包括安装JUnit和JunitEE,准备EJB例子,创建目录结构,编写测试用例,使用servlet运行测试用例,创建UI表格和web.xml配置描述器等步骤。还提到单元测试后由项目经理检查并完成报告,以及其他测试J2EE项目的方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

3.3.2 使用Junit测试EJB

3.3.2 .1安装JUnitJunitEE

你需要将junit.jarjunitee.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项目的单元测试。

 

### 关于测试作业指导书的内容概述 测试作业指导书是一种用于规范软件开发过程中测试活动的标准文件,其目的是确保测试工作的高效性和一致性。以下是基于已有引用内容和专业知识整理的相关信息。 #### 1. **测试用例编号规则** 为了便于管理和追踪测试用例,在不同的测试阶段应采用统一的命名规则来定义测试用例编号。具体如下: - 系统测试用例:`产品编号-ST-系统测试项名-系统测试子项名-XXX`[^1] - 集成测试用例:`产品编号-IT-系统测试项名-系统测试子项名-XXX` - 单元测试用例:`产品编号-UT-系统测试项名-系统测试子项名-XXX` 这种规则有助于快速定位特定测试用例及其所属模块,从而提高工作效率并减少混乱。 #### 2. **测试计划的核心要素** 测试计划作为整个测试流程的基础文档,需明确以下主要内容以保障测试目标的有效达成: - 测试策略:描述如何开展测试工作以及所使用的工具和技术方法。 - 测试范围:界定需要被验证的功能区域或业务逻辑部分。 - 资源配置:列举参与人员名单、所需设备及其他支持条件。 - 时间安排表:制定详细的日程规划以便跟踪进展状态。 - 成员责任划分:指定每位团队成员的具体工作任务与权限边界。 - 潜在风险识别及应对措施建议方案。 - 判定准则设定——即规定何种情况下可以认为项目成功完成或者判定失败。 上述要点构成了完整的测试框架结构[^2],能够帮助管理者更好地组织协调各项事务,并使相关人员清楚自己的角色定位及预期成果形式。 #### 3. **集成测试评估报告的关键组成部分** 当涉及到复杂系统的组装调试时,则特别强调要形成详尽准确的集成测试评价记录。此类文档通常包含以下几个方面的重要数据: - 已经确认无误运行正常的部件连接端口列表连同相应证明材料; - 尚未满足规格说明书要求的部分及其存在问题详情说明; - 实际操作覆盖面相对于理论设计方案的比例关系分析图表展示; - 发现缺陷的数量分布特征曲线图解加上分类汇总表格呈现方式; - 对未来可能产生的连锁反应做出预测预警提示通知机制建立情况介绍; - 提供改进方向指引意见集合体汇编版本发布日期标注等内容 。 这些细节共同构建了一个全面反映当前状况的画面,有利于决策者判断下一步行动路线的选择依据[^3]。 ```python def generate_test_case_id(test_type, product_code, test_item, sub_item): """ Generate a standardized test case ID based on the given parameters. Args: test_type (str): Type of testing ('ST' for system, 'IT' for integration, etc.) product_code (str): Product identifier code. test_item (str): Name of the main test item. sub_item (str): Specific name or description of the sub-item being tested. Returns: str: Formatted test case identification string. """ prefix_map = {"ST": "-ST-", "IT": "-IT-", "UT": "-UT-"} if test_type not in prefix_map: raise ValueError(f"Invalid test type specified: {test_type}") formatted_prefix = f"{product_code}{prefix_map[test_type]}{test_item}-{sub_item}-" return formatted_prefix + "{0:0>3}".format(len(formatted_prefix)) # Example usage print(generate_test_case_id('ST', 'PROD123', 'LoginModule', 'PasswordValidation')) ``` 以上代码片段展示了如何根据输入参数自动生成符合前述标准格式的测试案例ID字符串实例演示效果。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值