软件测试实验二.docx
《软件测试实验二.docx》由会员分享,可在线阅读,更多相关《软件测试实验二.docx(19页珍藏版)》请在冰豆网上搜索。
软件测试实验二
实验二、运用Junit工具进行面向对象系统的测试
一、实验目的
单元测试在面向对象的开发过程中变得越来越重要,而一个简明易学、适用广泛、高效稳定的单元测试框架对成功的实施测试有着至关重要的作用。
在java编程环境中,junitframework是一个已经被大多数java程序员采用和实证的优秀的测试框架。
该实验目的让学生掌握运用Junit框架进行面向对象的单元测试。
二、实验要求
了解Junit框架设计思想及使用。
提交测试文档和测试驱动程序代码
三、实验原理及内容
一)Junit框架介绍。
Junit是一个开发源代码的Java测试框架,用于编写和运行可重复的测试。
他是用于单元测试框架体系xUnit的一个实例(用于java语言)。
它包括以下特性:
1、用于测试期望结果的断言(Assertion)
2、用于共享共同测试数据的测试工具
3、用于方便的组织和运行测试的测试套件
4、图形和文本的测试运行器
Junit由6个包组成,分别为Framework、Extensions、Runner、Awtui、Textui、Swingui,前3个包是构建包,后3个包是表现层包,如下图所示:
Junit.framework包中包含了Junit测试类中所需要的所有基类(BaseClass),实际上这个包也是整个Junit的基础框架。
TestCase类是这个包的核心,测试人员对TestCase类进行继承开发自己的类测试驱动程序。
其余的类用来支援TestCase类,比如TestSuite用来集合多个测试用例,Assert类实现期望值和实际值的验证,TestResult收集所有测试用例执行后结果。
Test接口是这个包的关键所在,它建立了TestCase和TestSuite之间的关联,同时为整个框架做了扩展预留。
该测试框架如下图:
二)测试内容Product
Product包是一个典型的商品流通应用程序,该包(Package)包含了三个类Iproduct(接口)、(具体类)、(具体类)。
其中IProduct为接口类,该类规约了所有实现它的类的行为,还可以让所有实现了它的类成为一个参数,在各个方法中自由传递。
Product、StoreHouse为具体类分别实现了IProduct接口,Product包采用这样的设计可以用更通俗的语言解释:
我们有很多货物并且货物有不同的种类(书籍、食物等),在现实生活中仓库管理员把这些统称为“货物”,只是销售前或盘点中,才会细分成大小类型不一致的商品。
设计中描述了一个货物泛化对象Product,根据不同的私有属性描述,实例化的Product就成了书籍或者食物。
同样,StoreHouse类描述了一个超市对象。
下面是详细描述。
1、IProductCRCCards
IProductCRC
所属包
com.fastpoint.Product
类名称
PublicinterfaceIProduct
扩展于
none
子类型
none
实现于
none
类描述(功能)
货物交易接口,该接口制订了进行货物操作的动作规约。
类属性和类方法列表
01
publicIProductadd(IProductp)
02
publicIProductaddProduct(Productp)
03
IProductaddStoreHouse(StoreHouses)
04
publicbooleanisZero()
05
publicIProductnegate()
06
publicIProductsubtract(IProductp)
07
publicvoidappendTo(StoreHouses);
2、ProductCRCCards
ProductCRC
所属包
com.fastpoint.Product
类名称
PublicinterfaceIProduct
扩展于
none
子类型
none
实现于
none
类描述(功能)
货物交易接口,该接口制订了进行货物操作的动作规约。
类属性和类方法列表
01
privateintfSummation
02
privateStringfType
01
publicIProductadd(IProductp)
02
publicIProductaddProduct(Productp)
03
publicIProductaddStoreHouse(StoreHouses)
04
publicbooleanisZero()
05
publicIProductnegate()
06
publicIProductsubtract(IProductp)
07
publicvoidappendTo(StoreHouses);
08
publicintsummation()
09
publicStringtype()
10
publicbooleanequals(ObjectanObject)
11
publicinthaseCode()
12
publicStringtoSting()
类属性描述(功能)
属性名
fSummation
描述
某类商品总数
修饰为
private
类型
int
类属性描述(功能)
属性名
fType
描述
商品类型
修饰为
private
类型
String
类方法描述(功能)
方法名
add
描述
增加一个商品到货物对象中
01
参数类型
IProductp
返回值
IProduct
类方法描述(功能)
方法名
addProduct
描述
一个增加商品操作的快捷方式
01
参数类型
Productp
返回值
IProduct
类方法描述(功能)
方法名
addStoreHouse
描述
为货物对象指定一个超市对象
01
参数类型
StoreHouses
返回值
IProduct
类方法描述(功能)
方法名
isZero
描述
判断商品对象的值是否为空
返回值
boolean
类方法描述(功能)
方法名
negate
描述
取负值操作
返回值
IProduct
类方法描述(功能)
方法名
Subtract
描述
减少一个货物对象的商品值
01
参数类型
IProductp
返回值
IProduct
类方法描述(功能)
方法名
appendTo
描述
向超市对象的商品列表增加具体商品
01
参数类型
StoreHouses
返回值
void
类方法描述(功能)
方法名
summation
描述
返回某类商品的总数
返回值
fSummation
类方法描述(功能)
方法名
type
描述
返回某类商品的类型
返回值
fType
类方法描述(功能)
方法名
equals
描述
覆盖父类的同名方法,对传入的对象进行逻辑比对
01
参数类型
ObjectanObject
返回值
false/true
类方法描述(功能)
方法名
haseCode
描述
返回某类商品属性(类型+数量)的关键字
返回值
int
类方法描述(功能)
方法名
toSting
描述
返回某类商品属性(类型+数量)
返回值
buffer
3、StoreHouseCRCCards
ProductCRC
所属包
com.fastpoint.Product
类名称
PublicinterfaceIProduct
扩展于
none
子类型
none
实现于
none
类描述(功能)
货物交易接口,该接口制订了进行货物操作的动作规约。
类属性和类方法列表
01
privateVectorfMonies
01
publicIProductadd(IProductp)
02
publicIProductaddProduct(Productp)
03
publicIProductaddStoreHouse(StoreHouses)
04
publicIProductappendSH(StoreHouses)
05
publicvoidappendProduct(productp)
06
privateProductfindProduct(Stringtype)
07
privateBooleancontains(Productp)
08
publicbooleanisZero()
09
publicIProductnegate()
10
publicIProductsubtract(IProductp)
11
publicvoidappendTo(StoreHouses);
12
publicbooleanequals(ObjectanObject)
13
publicinthaseCode()
14
publicIproductsimplify()
15
publicStringtoSting()
16
staticIProductcreate(IProductp1,IProductp2)
类属性描述(功能)
属性名
fMonies
描述
超市商品列表
修饰为
private
类型
Vector
类方法描述(功能)
方法名
add
描述
增加商品
01
参数类型
IProductp
返回值
IProduct
类方法描述(功能)
方法名
addProduct
描述
一个增加商品操作的快捷方式,新增该商品到超市列表中。
01
参数类型
Productp
返回值
IProduct
类方法描述(功能)
方法名
addStoreHouse
描述
合并超市商品值
01
参数类型
StoreHouses
返回值
IProduct
类方法描述(功能)
方法名
appendSH
描述
增加商品到超市列表中
01
参数类型
StoreHouses
返回值
IProduct
类方法描述(功能)
方法名
appendProduct
描述
合并超市列表中的商品值
01
参数类型
ProductaProduct
返回值
void
类方法描述(功能)
方法名
findProduct
描述
根据商品类型查找相同属性的商品
01
参数类型
Stringtype
返回值
Product
类方法描述(功能)
方法名
contains
描述
根据返回商品类型判断商品值
01
参数类型
Productp
返回值
boolean
类方法描述(功能)
方法名
isZero
描述
判断商品对象的值是否为空
返回值
boolean
类方法描述(功能)
方法名
negate
描述
取超市商品列表的商品负值
返回值
IProduct
类方法描述(功能)
方法名
subtract
描述
减少超市商品列表中某项商品的值
01
参数类型
IProductp
返回值
IProduct
类方法描述(功能)
方法名
appendTo
描述
向商品对象到超市对象中
01
参数类型
StoreHouses
返回值
void
类方法描述(功能)
方法名
simplify
描述
返回超市商品列表中的一个单例
返回值
fType.hashCode()+fSummation
类方法描述(功能)
方法名
equals
描述
覆盖父类的同名方法,对传入的对象进行逻辑比对
01
参数类型
ObjectanObject
返回值
false/true
类方法描述(功能)
方法名
haseCode
描述
返回超市实例的哈希值
返回值
int
类方法描述(功能)
方法名
toSting
描述
覆盖父类同名方法,返回超市商品列表(字符串输出)
返回值
Sting
类方法描述(功能)
方法名
create
描述
创建指定超市对象的商品列表
01
参数类型
IProductp1
02
参数类型
IProductp1
返回值
IProduct
三)程序代码
1、IProduct
packagecom.fastpoint.Product;
publicinterfaceIProduct{
publicIProductadd(IProductp);
publicIProductaddProduct(Productp);
publicIProductaddStoreHouse(StoreHouses);
publicbooleanisZero();
publicIProductnegate();
publicIProductsubtract(IProductp);
publicvoidappendTo(StoreHouses);
}
2、Product
packagecom.fastpoint.Product;
publicclassProductimplementsIProduct{
privateintfSummation;
privateStringfType;
publicProduct(intsummation,Stringtype){
fSummation=summation;
fType=type;
}
publicIProductadd(IProductp){
returnp.addProduct(this);
}
publicIProductaddProduct(Productp){
if(p.type().equals(type()))
returnnewProduct(summation()+p.summation(),type());
returnStoreHouse.create(this,p);
}
publicIProductaddStoreHouse(StoreHouses){
returns.addProduct(this);
}
publicintsummation(){
returnfSummation;
}
publicStringtype(){
returnfType;
}
publicbooleanequals(ObjectanObject){
if(isZero())
if(anObjectinstanceofIProduct)
return((IProduct)anObject).isZero();
if(anObjectinstanceofProduct){
ProductaProduct=(Product)anObject;
returnaProduct.type().equals(type())&&summation()==aProduct.summation();
}
returnfalse;
}
publicinthaseCode(){
returnfType.hashCode()+fSummation;
}
publicbooleanisZero(){
returnsummation()==0;
}
publicIProductnegate(){
returnnewProduct(-summation(),type());
}
publicIProductsubtract(IProductp){
returnadd(p.negate());
}
publicStringtoSting(){
StringBufferbuffer=newStringBuffer();
buffer.append("["+summation()+""+type()+"]");
returnbuffer.toString();
}
publicvoidappendTo(StoreHouses){
s.appendProduct(this);
}
}
3、StoreHouse
packagecom.fastpoint.Product;
importjava.util.Vector;
importjava.util.Enumeration;
publicclassStoreHouseimplementsIProduct{
privateVectorfMonies=newVector(5);
privateIProductsimplify(){
if(fMonies.size()==1)
return(IProduct)fMonies.elements().nextElement();
returnthis;
}
publicProductfindProduct(Stringtype){
for(Enumeratione=fMonies.elements();e.hasMoreElements();){
Productp=(Product)e.nextElement();
if(p.type().equals(type))
returnp;
}
returnnull;
}
privatebooleancontains(Productp){
Productfound=findProduct(p.type());
if(found==null)returnfalse;
returnfound.summation()==p.summation();
}
publicinthashCode(){
inthash=0;
for(Enumeratione=fMonies.elements();e.hasMoreElements();){
Objectm=e.nextElement();
hash^=m.hashCode();
}
returnhash;
}
publicbooleanisZero(){
returnfMonies.size()==0;
}
staticIProductcreate(IProductp1,IProductp2){
StoreHouseresult=newStoreHouse();
p1.appendTo(result);
p2.appendTo(result);
returnresult.simplify();
}
publicIProductadd(IProductm){
returnm.addStoreHouse(this);
}
publicIProductaddProduct(Productp){
returnStoreHouse.create(p,this);
}
voidappendProduct(ProductaProduct){
if(aProduct.isZero())return;
IProductold=findProduct(aProduct.type());
if(old==null){
fMonies.addElement(aProduct);
return;
}
fMonies.removeElement(old);
IProductsum=old.add(aProduct);
if(sum.isZero())
return;
fMonies.addElement(sum);
}
publicIProductaddStoreHouse(StoreHouses){
returnStoreHouse.create(s,this);
}
voidappendSH(StoreHouseaSH){
for(Enumeratione=aSH.fMonies.elements();e.hasMoreElements();)
appendProduct((Product)e.nextElement());
}
publicbooleanequals(ObjectanObject){
if(isZero())
if(anObjectinstanceofIProduct)
return((IProduct)anObject).isZero();
if(anObjectinstanceofStoreHouse){
StoreHouseaStoreHouse=(StoreHouse)anObject;
if(aStoreHouse.fMonies.size()!
=fMonies.size())
returnfalse;
for(Enumeratione=fMonies.elements();e.hasMoreElements();){
Productp=(Product)e.nextElement();
if(!
aStoreHouse.contains(p))
returnfalse;
}
returntrue;
}
returnfalse;
}
publicIProductnegate(){
StoreHouseresult=newStoreHouse();
for(Enumeratione=fMonies.elements();e.hasMoreElements();){
Productp=(Product)e.nextElement();
result.appendProduct((Product)p.negate());
}
returnresult;
}
publicIProductsubtract(IProductp){
returnadd(p.negate());
}
pub