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

这是一份关于单元测试的作业指导书,作者在担任项目经理期间编写,详细介绍了不同开发环境下如何进行单元测试及配置。内容包括JUnit和Ant等工具的使用,适合Java开发者参考。

这是我以前任项目经理时,编写的关于单元测试方面的作业指导书,针对多种开发环境叙述怎么进行单元测试以及环境配置,现在整理了一下。应该对大家有所帮助。

这是第二部分。

 

3.3  JAVA标准

3.3.1测试环境使用JSDK1.3

3.3.1.1前题:

使用JUnit3.7版,解压后,路径为x://junit3.7

使用Ant1.3版,解压后,路径为x://ant1.3

 

配置测试框架使用环境:

测试框架使用环境可以在build.xml文件中配置,此文件是ant的输入文件,ant根据其来生成和执行应用程序;(这相当于C/C++Makefile文件,但比之功能要强大、且配置更为简单);

1x://ant1.3/bin目录下含有ant执行程序的批处理文件,所以要将此目录加入到系统环境变量path中;

2.建立项目文件目录结构;我建议在进行项目开发能有一个完整的目录结构,如下所示:

AntCons”为项目目录名称,可以替换为所需要的项目名称;在项目目录下有两个子目录分别为buildsrc,这两个子目录分别为源文件目录和发布文件目录;而src(源文件目录)又分为main(源文件)test(测试文件)目录。而com.myjava则是包名,对应于源java文件中的package

3.在项目目录中建立build.xml文件(未涉及测试的),文件大致结构如下所示:

定义项目名称及位置

<project default="dist" name="MyTest" basedir="." >

首先声明一些变量,便于使用

<property name="builddir" value="build/classes" />

<property name="projectname" value="MyTest" />

<property name="extclasslib" value="D:/Work_Java/AntCons/build/classes" />

定义目标:编译;

在此目标中将建立发布目录、编译目标java源文件并且指定class路径;

<target name="compile">

<mkdir dir="${builddir}" />

<javac destdir="${builddir}" srcdir="src/main/"

classpath="${java.class.path};${extclasslib}">

        <include name="**/*.java" />

</javac> 

</target>

 

定义目标:运行;

此目标依赖于编译目标;

<target name="runtest" depends="compile">

<java classname="com.myjava.UseHello" fork="yes" taskname="usehello">

<classpath path="${java.class.path};${extclasslib}">

</classpath>

</java>

</target>

 

</project>

 

build.xml相关标记的说明可以在ant下载包的说明文档中找到,ant定义了很多方便操作的指令)

 

4.编写代码文件,我们假设代码文件位于com.myjava包中,则代码文件将放置于src/main/com/myjava目录下;

 

5.编写单元测试文件,依照上面的项目目录设置,则单元测试文件放置于src/test下;

 

3.3.1.2建立测试用例:

1、以类名加前辍“Test”命名测试单元文件名,比如“Sample”类的类文件名为Sample.java,则测试单元文件命名为TestSample.java

2、编写测试用例类,在测试用例类中引入测试框架包以及要测试的包声明,以TestSample为例:

测试文件TestSample.java

package test.Sample; //测试包声明

import junit.framework.*; //引入测试框架包

import xxxx; //引入被测试单元包

 

//派生测试框架的测试用例类

public class TestSimple extends TestCase {

       protected int fValue1;

       protected int fValue2;

       public TestSimple(String name) {

              super(name);

       }

 

       //用例初始化,可作为桩函数

       protected void setUp() {

              fValue1= 2;

              fValue2= 3;

       }

 

       //用例析构

       protected void tearDown(){

       }

 

       //组装测试用例

       public static Test suite() {

              /*

               * the type safe way

               *

//增加测试用例到“箱子”

              TestSuite suite= new TestSuite();

              suite.addTest(

                     new TestSimple("add") {

                             protected void runTest() { testAdd(); }

                     }

              );

 

              suite.addTest(

                     new TestSimple("testDivideByZero") {

                             protected void runTest() { testDivideByZero(); }

                     }

              );

              return suite;

              */

 

              /*

               * the dynamic way

               */

              return new TestSuite(TestSimple.class);

       }

 

       //用例1

       public void testAdd() {

              //normal test, 功能测试,属黑盒测试

double result= fValue1 + fValue2;

              assertTrue(result == 6);

       //extra test, 条件及错误路径测试,属白盒测试

      

       //except test, 异常测试,属白盒测试

 

       //other test, see the functions "...",

//其它测试,比如被测试类的基类方法,在此需要做出说明

       }

 

       //用例2

       public void testDivideByZero() {

       //................

       }

 

       //用例3

       public void testEquals() {

       //.................

       }

}

 

3. 编写驱动测试用例类,将各个测试用例组装到一起进行测试:

package test.Sample; //测试包声明

import junit.framework.*; //引入测试框架包

import xxxx; //引入被测试单元包

/**

 * TestSuite that runs all the sample tests

 *

 */

public class AllTests {

       public static void main (String[] args) {

              junit.textui.TestRunner.run (suite());

       }

       public static Test suite ( ) {

              //建立测试用例的“箱子”

              TestSuite suite= new TestSuite("All Tests");

              suite.addTest(TestSimple.suite());

              //此处增加一些其它单元测试类

              //......

suite.addTest(junit.tests.AllTests.suite());

           return suite;

       }

}

 

4. 将测试单元的编译及运行加入到build.xml中;

build.xmlproject标记加入两个目标,现在的build.xml如下所示:

定义项目名称及位置

<project default="dist" name="MyTest" basedir="." >

首先声明一些变量,便于使用

<property name="appname" value="sample" />

<property name="builddir" value="build/classes" />

<property name="projectname" value="MyTest" />

<property name="extclasslib" value="D:/Work_Java/AntCons/build/classes" />

 

定义目标:依赖库检测;

<target name="JUNIT">

  <available property="junit.present" classname="junit.framework.TestCase" />

</target>

 

定义目标:编译;

在此目标中将建立发布目录、编译目标java源文件并且指定class路径;

<target name="compile" depends="JUNIT">

 <mkdir dir="${builddir}" />

<javac destdir="${builddir}" srcdir="src/main/"

classpath="${java.class.path};${extclasslib}">

        <include name="**/*.java" />

  </javac>    

</target>

 

定义目标:打包;

在此目标中将建立分发包目录、将编译完成的.class文件打包为jar文件;

<target name="jar" depends="compile">

<mkdir dir="build/lib"/>

  <jar jarfile="build/lib/${appname}.jar"

    basedir="${builddir}" includes="com/**"/>

</target>

 

定义目标:编译测试用例;

<target name="compiletests" depends="jar">

  <mkdir dir="build/testcases"/>

  <javac srcdir="src/test" destdir="build/testcases">

    <classpath>

      <pathelement location="build/lib/${appname}.jar" />

      <pathelement path="" />

    </classpath>

    <include name="**/*.java"/>

  </javac>

</target>

 

定义目标:运行应用程序;

此目标依赖于编译目标;

<target name="runtest" depends="compile">

<java classname="com.myjava.UseHello" fork="yes" taskname="usehello">

<classpath path="${java.class.path};${extclasslib}">

</classpath>

</java>

</target>

 

定义目标:运行测试用例;

在此目标中将运行测试用例,运行在窗口中进行还是在控制台进行取决于所用classname"junit.textui.TestRunner"表示在控制台进行,如果改为"junit.ui.TestRunner"则可以在窗口中运行

<target name="runtests" depends="compiletests" if="junit.present">

 <java fork="yes" classname="junit.textui.TestRunner"

   taskname="junit" failonerror="true">

   <arg value="test.Sample.AllTests"/>

   <classpath>

     <pathelement location="build/lib/${appname}.jar" />

     <pathelement location="build/testcases" />

     <pathelement path="" />

     <pathelement path="${java.class.path}" />

   </classpath>

 </java>

</target>

 

</project>

 

5. 最后,在项目所在目录执行Ant target_name,比如:运行测试用例可以使用Ant runtests

 
### 关于测试作业指导书的内容概述 测试作业指导书是一种用于规范软件开发过程中测试活动的标准文件,其目的是确保测试工作的高效性和一致性。以下是基于已有引用内容和专业知识整理的相关信息。 #### 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、付费专栏及课程。

余额充值