Junit白盒测试测试用例Word格式文档下载.docx
《Junit白盒测试测试用例Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《Junit白盒测试测试用例Word格式文档下载.docx(17页珍藏版)》请在冰豆网上搜索。
检查所写文档,有需要进行修改
2.2、测试环境
下表列出了测试的系统环境
机器环境
工作计算机
软件环境
(相关软件、操作系统等)
WindowsXPSP3
jdk1.6.0_06
EclipsePlatformVersion:
3.3.3
硬件环境
(设备、网络等)
笔记本电脑
2.3、测试工具
用途
工具名称
生产厂商
版本
单元测试
JUNIT
JUnit.org
4.7/3.8
三、测试
3.1、greatCircleDistance()函数
greatCircleDistance()方法计算球面距离,输入的分别为两个点的经度和纬度以及球的半径,以下为其源码:
publicstaticdoublegreatCircleDistance(doublelatitudeS,
doublelongitudeS,doublelatitudeF,doublelongitudeF,doubler)
{
if(latitudeS<
=-90||latitudeS>
=90||
latitudeF<
=-90||latitudeF>
longitudeS<
=-180||longitudeS>
=180||
longitudeF<
=-180||longitudeF>
=180||r<
0){
thrownewIllegalArgumentException();
}
latitudeS=Math.toRadians(latitudeS);
latitudeF=Math.toRadians(latitudeF);
longitudeS=Math.toRadians(longitudeS);
longitudeF=Math.toRadians(longitudeF);
doubledeltaLongitude=longitudeF-longitudeS;
doublea=Math.cos(latitudeF)*Math.sin(deltaLongitude);
doubleb=Math.cos(latitudeS)*Math.sin(latitudeF);
b-=Math.sin(latitudeS)*Math.cos(latitudeF)
*Math.cos(deltaLongitude);
doublec=Math.sin(latitudeS)*Math.sin(latitudeF);
c+=Math.cos(latitudeS)*Math.cos(latitudeF)
if(c<
0)
c=-c;
returnMath.atan(Math.sqrt(a*a+b*b)/c)*r;
}
一、针对此函数我们运用了等价类划分的方法生成JUnit测试用例总共划分出25个用例,等价类分别是:
●对latitudeS划分:
-90到0,0到90以及不合法输入;
●对longitudeS划分:
-180到0,0到180以及不合法输入;
●对latitudeF划分:
●对longitudeF划分:
●对半径r的划分:
大于0以及不合法的输入;
以下为具体的测试用例:
latitudeS
longitudeS
latitudeF
longitudeF
r
预期结果
实际测试结果
30
100
通过
-120
115.98
-60
157.08
63.003
131.812
89.566
112.296
135.256
100.807
72.273
50.536
120
60
抛出异常
-210
210
-100
3.2、compareBytes()函数
compareBytes()方法实现了数组的比较,将数组a的内容与数组b的内容比较,比较时将数组中数据视为无符号数。
当a小于b时返回-1,a大于b时返回1,相等时返回0。
以下为源代码:
publicstaticintcompareBytes(byte[]a,intaOff,byte[]b,intbOff,intlen)
{
if(a==null||b==null){
thrownewIllegalArgumentException("
Illegalarray"
);
if(aOff<
0||bOff<
Illegaloffset"
if(len<
Illegallen"
if(len>
a.length-aOff||len>
b.length-bOff){
Notenoughbyteslefttocompare!
"
for(inti=0;
i<
len;
i++){
//wewantourcomparisontobeunsigned.
finalintab=a[aOff+i]&
0xff;
finalintbb=b[bOff+i]&
if(ab>
bb){
return1;
}elseif(ab<
return-1;
}
return0;
}
一、针对此函数我们运用了等价类划分的方法生成JUnit测试用例总共划分出22个用例,分别是:
●数组a:
可划分为合法输入与不合法输入(具体为null);
●aOff:
可以划分为<
0以及>
=a.length;
●数组b:
可划分为合法输入与不合法输入(具体为null);
●bOff:
=b.length;
●len:
可以划分为合法与不合法(具体包括len<
0以及len>
b.length–bOff;
●此外,数组a,b还需考虑符号扩展问题。
对于数组中元素,需分别考虑其大于0、小于0的情况(此时,其对应的无符号数大于或等于0x80)。
数组a
aOff
数组b
bOff
len
null
1
{5,6,2,3}
2
{1,2,3}
-1
3
-2
4
{1,2,3,4}
{5,6,3,3}
{5,6,0xf0,3}
{1,0xf0,3}
{5,6,0xf1,3}
{1,3,3}
{1,0xff,3}
{1,0xf1,3}
{1,3,2}
{1,3,0xf0}
{5,6,3,0xf1}
{5,6,3,2}
{1,3,0xf1}
{5,6,3,0xf0}
3.3、getHue()函数
getHue()方法是计算HSL颜色模型中的Hue参数,以下为其源码:
publicstaticfloatgetHue(floatred,floatgreen,floatblue,floatmax,floatmin)
floathue=max-min;
if(hue>
0.0f){
if(max==red){
hue=(green-blue)/hue;
if(hue<
hue+=6.0f;
elseif(max==green){
hue=2.0f+(blue-red)/hue;
elseif(max==blue){
hue=4.0f+(red-green)/hue;
else{
thrownewIllegalArgumentException("
invalidmax"
hue*=60f;
elseif(hue<
0.0f){
max<
min"
returnhue;
一、针对此函数我们运用了等价类划分的方法生成JUnit测试用例总共划分出6个用例,分别是:
●对max参数进行划分:
max=blue,max=red,max=red
max=green,max不等于以上三种参数中的任何一种,max<
min。
●当max=red时,进行如下划分:
green>
blue,green<
=blue
red
green
blue
max
min
0.2
0.6
0.8
200
40
320
80
0.5
3.4、arraycopy()函数
Arraycopy()方法实现了数组的复制,将源数组src的内容复制到数组dst中,以下为源代码:
publicstaticvoidarraycopy(byte[]src,intsrc_position,byte[]dst,intdst_position,intlength)
if(src==null)
srcwasnull"
if(dst==null)
dstwasnull"
if(length<
lengthwaslessthan0"
if(src_position<
thrownewIllegalArgumentException("
src_positionwaslessthan0.Actualvalue"
+src_position);
if(src_position+length>
src.length)
src_position+lengthwouldoverrunthesrcarray.Expectedendat"
+(src_position+length)+"
actualendat"
+src.length);
if(dst_position<
dst_positionwaslessthan0.Actualvalue"
+dst_position);
if(dst_position+length>
dst.length)
dst_position+lengthwouldoverrunthedstarray.Expectedendat"
+(dst_position+length)+"
+dst.length);
System.arraycopy(src,src_position,dst,dst_position,length);
一、针对此函数我们运用了等价类划分的方法生成JUnit测试用例总共划分出15个用例,分别是:
●数组Src:
●src_position:
可分为合法输入以及不合法输入,其中不合法输入包括:
小于0,src_position+length>
=src.length,其中合法输入又可分为等于0和大于0;
●数组dst:
可划分为合法输入与不合法输入(具体为null),其中合法输入可分为和src是同一数组以及不是同一数组的情况;
●dst_position:
可分为合法输入以及不合法输入,其中不合法输入包括:
小于0,dst_position+length>
=dst.length,其中合法输入又可分为等于0和大于0;
●length:
可划分为合法输入以及不合法输入(具体指length<
0);
数组src
src_position
数组dst
dst_position
length
{1,2}
{3,4}
{3,4,5,6}
{3,4,5}
{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}
与src为同一数组
5
同上
{0,1,0,1,2,3,4,,7,8,9,10,11,12,13,14,15,16}
{2,3,4,5,6,5,6,7,8,9,10,11,12,13,14,15,16}
10
{0,1,2,10,11,12,13,14,8,9,10,11,12,13,14,15,16}
{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}
数组dst不变
{2,3,4,5,6,5,6,7,8,9,10,11,12,13,14,15,16}
{0,1,2,10,11,12,13,14,8,9,10,11,12,13,14,15,16}
3.5、computeIntersection()函数
computeIntersection()方法计算两个矩形相交部分所形成的矩形的坐标,以下为其源码:
publicstaticRectanglecomputeIntersection(intx,inty,intwidth,intheight,Rectangledest)
if(dest==null)
returnnull;
if(x<
0||y<
0||width<
0||height<
intx1=(x>
dest.x)?
x:
dest.x;
intx2=((x+width)<
(dest.x+dest.width))?
(x+width):
(dest.x+
dest.width);
inty1=(y>
dest.y)?
y:
dest.y;
inty2=((y+height)<
(dest.y+dest.height)?
(y+height):
(dest.y+
dest.height));
dest.x=x1;
dest.y=y1;
dest.width=x2-x1;
dest.height=y2-y1;
//Ifrectanglesdon'
tintersect,returnzero'
dintersection.
if(dest.width<
0||dest.height<
dest.x=dest.y=dest.width=dest.height=0;
returndest;
一、针对此函数我们运用了等价类划分的方法生成JUnit测试用例总共划分出41个用例,分别是:
●针对第一个矩形的属性坐标(x,y),宽width以及高height大体分为合法输入和不合法输入(具体为输入小于0的数)。
●合法输入中有根据两个矩形的位置的不同情况又进行了划分,具体而言,设第一个矩形的左上角顶点坐标为(x1,y1),右下角顶点坐标为(x2,y2),x1、x2与第二个矩形横坐标的关系有:
小于其左边横坐标,在二边中间,大于右边横坐标。
y1、y2与第二个矩形纵坐标的关系也可做类似划分。
●dest:
分为null和合法输入;
x
y
width
height
dest
-10
(10,10,100,100)