JAVA测试模式

发表于:2009-03-24来源:作者:点击数: 标签:javaJAVAJava模式
测试模式是一种针对 软件测试 领域的某种高频率出现问题而采取并经过实践证明行之有效的专门化、高效的解决途径(方法),它在软件理论和实践两者之间起着“桥梁”的作用。在 面向对象 语言 JAVA 程序测试的过程中,一个较为棘手的问题就是JAVA类的可视性问题
测试模式是一种针对软件测试领域的某种高频率出现问题而采取并经过实践证明行之有效的专门化、高效的解决途径(方法),它在软件理论和实践两者之间起着“桥梁”的作用。在面向对象语言JAVA程序测试的过程中,一个较为棘手的问题就是JAVA类的可视性问题。“信息隐蔽”固然是面向对象语言设计的一个突出的优点,但是同时也给测试带来诸多不便,有关“隐蔽信息”的可测试性成为这类测试的一大突出结症。为此我们针对JAVA类不同的“可视性”要求的场合,采取相应的测试模式来支撑相关JAVA类(包)的测试。本文主要总结五个常用的JAVA测试模式,以飨读者。这五个模式同样适合于其它面向对象类(包)的测试,只不过在具体细节上要考虑与JAVA语言信息隐蔽性的差异。比如:JAVA的可视性以包为界,同一个包内的类对其他类具有相同的存取权限。而C++则以类为界,只有子类和友员函数方可对基类的隐蔽信息进行存取。   我们在下面以图表的方式给出五个常用JAVA测试模式详细描述,有关模式的描述类目分别是模式名称、测试对象、针对问题、约束条件、解决方法、实例、约束解决方式和该测试的设计原理。

 

模式(一)Main模式

模式名称
Main

测试对象
JAVA类

针对问题
测试人员不知道在何处编写驱动和初始化被测试类的测试代码

约束
测试必须容易运行、测试代码能够访问该类所有的特征(所有的属性和方法)

解决方法
将测试代码放入类的publicstaticvoidmain(String[]args)方法中去

实例
publicstaticvoidmain(String[]args){

SomeClassresult;

//performthetest…

System.out.print(“resultis..”);

}

约束解决
该测试代码能够率先被激活和执行、并能够访问被测试类所有的特征

设计原理
JAVA类可以拥有publicstaticvoidmain(String[]args)方法,它是类在JVM中被率先执行的方法,控制着整个类的执行逻辑,main方法能够访问所在类的所有属性和方法

模式(二)toString模式

模式名称
toString

测试对象
作为运算结果的类

针对问题
测试人员不知道如何检验一个运算对象的中间结果和最终结果

约束
测试结果代表对象内部的一个状态,而该状态必须能够被测试

解决方法
通过使用toString方法来对类状态进行描述,描述结果可以通过打印与预期结果进行比较

实例
classSomeClass{

//…

publicStringtoString(){

//customrepresentation

}

}

约束解决
类的内部状态通过字符串来进行表示因而得以解决

设计原理
在基类定义的toString()方法能够提供特定对象的状态的描述,通过将对象状态描述进行打印和显示来判定对象状态是否与预期相符

模式(三)Equal模式

模式名称
Equal

测试对象
JAVA类

针对问题
作为运算结果的类

约束
测试人员不知道如何检验一个运算对象的中间结果和最终结果

解决方法
定义equals方法比较实际结果与预期结果进行比较

实例
classSomeClass{

//…

publicbooleanequals(Objecto){

//customcomparison

}

}

约束解决
保持某个状态的对象需要与预期对象进行比较,通过比较后的布尔值来确定是否与预期结果相符合

设计原理
在基类定义的publicbooleanequals(Object)能够对比对象间的差异并以布尔值形式返回比较结果

模式(四)InternalTesterClass模式

模式名称
InternalTesterClass

测试对象
JAVA包

针对问题
测试人员不知在何处编写测试代码测试包中的类

约束
测试代码与运行代码必须分开来,测试代码能够访问到类的所有特性,测试代码起到的是一个包的客户端的角色。

解决方法
新建一个类并将该类的包路径与被测试类的包路径相同,然后在该类里写入所有的测试代码

实例
packagetheOne;

publiclearcase/" target="_blank" >cclassInternalTestClass{

//…

}

约束解决
所有的测试代码均与运行代码分离,由于它与运行代码在同一包路径下,所以它与普通的客户端相比具有更多的可视性

设计原理
将测试代码定义在一个特定的类中。由于测试类与运行类在同一个包路径下,因此它能访问测试类的类的所有特性。因此,它远比客户端测试具有更大的可视性。

模式(五)ExternTesterClass模式

模式名称
ExternTesterClass模式

测试对象
JAVA包

针对问题
测试人员不知在何处编写测试代码测试包中的类

约束
测试代码与运行代码必须分开来,测试代码能够访问到类的可视特征,测试代码起到的是一个包的客户端的角色。

解决方法
新建一个类,指定与被测试类不同的包路径,然后在该类里写入所有的测试代码

实例
packageanotherOne;

publicclassExternalTestClass{

//…

}

约束解决
所有的测试代码均与运行代码分离,由于它与运行代码在不同的包路径下,所以它与普通的客户端的可视性相同

设计原理
将测试代码定义在一个特定的类中。由于测试类与运行类不在同一个包路径下,因此它不能访问测试类的所有属性和方法。但是它与客户端具有相同的可视性。因此,它可以替代客户端进行测试。

上面五个模式的作用关系如图-1所示:

                     

图-1JAVA测试模式图解

了解上述所述的模式有助于测试人员在具体JAVA代码测试中编写测试类,同时上述的这些JAVA测试模式还可以借助JUnit这样的测试框架来实现。

原文转自:http://www.ltesting.net