welcome to my blog!我每天都会纪录我学习的点点滴滴,也希望各位前辈多指教.
单元测试用例设计技术(转)
上一篇 /
下一篇 2007-05-08 22:42:21
/ 个人分类:study
输入数据是
测试用例的核心,我们对输入数据的定义是:被测试函数所读取的外部数据及这些数据的初始值。外部数据是对于被测试函数来说的,实际上就是除了局部变量以外的
其他数据,我们把这些数据分为几类:参数、成员变量、全局变量、IO媒体。IO媒体是指文件、
数据库或其他储存或传输数据的媒体,例如,被测试函数要从文件或数据库读取数据,那么,文件或数据库中的原始数据也属于输入数据。一个函数无论多复杂,都无非是对这几类数据的读取、计算和写入。预期输出是指:返回值及被测试函数所写入的外部数据的结果值。返回值就不用说了,被测试函数进行了写操作的参数(输出参数)、成员变量、全局变量、IO媒体,它们的预期的结果值都是预期输出。一个
测试用例,就是设定输入数据,运行被测试函数,然后判断实际输出是否符合预期。下面举一个与成员变量有关的例子:
51Testing软件测试网K9{
a*?*ox产品函数:
&a|"Vjd)xTK54929 void CMyClass::Grow(int years)
51Testing软件测试网Iai&ld#os/jz5e {
3G"tm:h+z\S54929 mAge += years;
51Testing软件测试网jb YB v3a if(mAge < 10)51Testing软件测试网3^%AIGR
d
mPhase = "儿童";
ZR;B
^pN3R54929 else if(mAge <20)
gbEL/kG&J0e54929 mPhase = "少年";51Testing软件测试网3g
Ch
I\EvH
else if(mAge <45)
7le$^%a
m6e M54929 mPhase = "青年";51Testing软件测试网l`
]b+W.kSO
else if(mAge <60)51Testing软件测试网,P5qXO1CCA
mPhase = "老年";
x}dg
fbf Ia&o"G54929 mAge = 8;51Testing软件测试网(M9F^h j5fTe.g
pObj->Grow(years);51Testing软件测试网C1o]"]M(L
ASSERT( pObj->mAge == 9 );
;r4mL+y }qU j54929 ASSERT( pObj->mPhase == "儿童" );51Testing软件测试网}W7v
z'y
}CaseEnd();51Testing软件测试网3j ~/Z5A,k;G~
在输入数据中对被测试类的成员变量mAge进行赋值,在预期输出中断言成员变量的值。现在可以看到我们所推荐的格式的好处了吧,这种格式可以适应很复杂的测试。在输入数据部分还可以调用其他成员函数,例如:执行被测试函数前可能需要读取文件中的数据保存到成员变量,或需要连接数据库,我们把这些操作称为初始化操作。例如,上例中 ASSERT( ...)之前可以加pObj->OpenFile();。为了访问私有成员,可以将测试类定义为产品类的友元类。例如,定义一个宏:
ey-r8O0?Je54929 #define UNIT_TEST(cls) friend class cls##Tester;
JGA)lY(B:jh54929 然后在产品类声明中加一行代码:UNIT_TEST(ClassName)。
0`1cPb y'l}549299H6Wo
St wq54929 下面谈谈测试用例设计。前面已经说了,测试用例的核心是输入数据。预期输出是依据输入数据和程序功能来确定的,也就是说,对于某一程序,输入数据确定了,预期输出也就可以确定了,至于生成/销毁被测试对象和运行测试的语句,是所有测试用例都大同小异的,因此,我们讨论测试用例时,只讨论输入数据。51Testing软件测试网"w$?"c
L;@4N
F^Y
前面说过,输入数据包括四类:参数、成员变量、全局变量、IO媒体,这四类数据中,只要所测试的程序需要执行读操作的,就要设定其初始值,其中,前两类比较常用,后两类较少用。显然,把输入数据的所有可能取值都进行测试,是不可能也是无意义的,我们应该用一定的规则选择有代表性的数据作为输入数据,主要有三种:正常输入,边界输入,非法输入,每种输入还可以分类,也就是平常说的等价类法,每类取一个数据作为输入数据,如果测试通过,可以肯定同类的其他输入也是可以通过的。下面举例说明:
#oBD2e+Te+U3lo54929 正常输入:51Testing软件测试网i(W%K9`Se/BR/O^
例如字符串的Trim函数,功能是将字符串前后的空格去除,那么正常的输入可以有四类:前面有空格;后面有空格;前后均有空格;前后均无空格。
4~$f}-TY-Y"f54929 边界输入:
(Dr&QHuD2}4A54929 上例中空字符串可以看作是边界输入。
?h;p
cmmt54929 再如一个表示年龄的参数,它的有效范围是0-100,那么边界输入有两个:0和100。51Testing软件测试网 qe]W
bY
非法输入:51Testing软件测试网|&Y']h
~
非法输入是正常取值范围以外的数据,或使代码不能完成正常功能的输入,如上例中表示年龄的参数,小于0或大于100都是非法输入,再如一个进行文件操作的函数,非法输入有这么几类:文件不存在;目录不存在;文件正在被其他程序打开;权限错误。51Testing软件测试网
N-a%W)E3Lv_6nv
如果函数使用了外部数据,则正常输入是肯定会有的,而边界输入和非法输入不是所有函数都有。一般情况下,即使没有设计文档,考虑以上三种输入也可以找出函数的基本功能点。实际上,单元测试与代码编写是“一体两面”的关系,编码时对上述三种输入都是必须考虑的,否则代码的健壮性就会成问题
nCul|h$f@54929
相关阅读:
- 什么是触发器? (xiangshizu, 2007-4-18)
- 本地DNS解析 (hiyizhiyu, 2007-4-20)
- 回归测试 (xiangshizu, 2007-4-23)
- 测试用例 (xiangshizu, 2007-4-26)
- 编程小知识 (hiyizhiyu, 2007-4-26)
- “白盒”静动测试两齐全(转) (xiangshizu, 2007-4-26)
- 全面介绍单元测试 (xiangshizu, 2007-4-26)
- tips about vbs (hiyizhiyu, 2007-4-28)
- 回归测试中测试用例的维护 (hiyizhiyu, 2007-4-30)
- 负载压力测试 (xiangshizu, 2007-5-08)
收藏
举报
TAG:
study