请教一个简单的测试函数的设计方法
被测函数:int anum(x,y){
int ret;
switch(x与y的表达式)
{case 0:
ret=a0();break;
case 1: ret=a1();break;
case 2: ret=a2();break;
case 3: ret=a3();break;
default:
ret=a4();break;
}
return ret;
}
其中a0,a1,a2,a3,a4这五个函数处理的内容虽各不相同,但返回值却都为0,那该如何设计测试函数anum的测试用例呢? 返回值都一样挺郁闷的。。
让我设计的话我就这样设计一下:
anum(x,y)是被测函数,a1()、a2()这些是桩函数
为被测函数每个分支设计测试用例,在每个测试用例中把“x与y的表达式的值“作为中间输出,“a()的结果“做为最终输出,把实际的中间输出结果、最终输出结果和预期的中间输出结果、最终输出结果做比较。
回复 #2 dxhwj 的帖子
恩,有点明白了,我是个新手,还想问一下,什么是桩函数?中间结果和最终结果该如何设计?
这些概念还未成接触到。
我是这样理解的。。。不能保证一定对哦,可以参考一下
anum(x,y)需要调用a1()、a2()这些函数,因为被测函数是anum(x,y),它在执行过程中调用了其他函数才能运行,就设计几个桩函数来替代a1()、a2()这些函数实现的功能。如果要测a1()函数,没有调用其他函数的话就不需要写桩函数。如果采用孤立测试的话,搭建测试环境时就需要对anum(x,y)函数写一个驱动函数来驱动它执行,再写五个桩函数来代替它调用的函数,然后测它调用的函数,每个函数要写一个驱动函数驱动它执行。
在这里只有anum(x,y)函数的实现过程,写测anum(x,y)函数的用例时,没有考虑a()函数如何实现
假如是z=x-y,
定义输入参数: int x;int y;
定义期望输出(c为期望的中间输出,Result为期望的最终输出) : int c;int Result;
定义测试实际输出(z为期望的中间输出,Ret为期望的最终输出): int z;intret;
用例输入: x=2;y=1;
期望输出: c=1; Result=0
z=x-y;中间变量结果
ret= anum(x,y);驱动anum()函数去执行,最终输出
结果比较:
if ((Ret != Result) || (z != c)){输出失败;}
else {输出成功;} 想想还是觉得不对哎,看来只有关于什么是桩函数可以看看了sdlkfj3
回复 #4 dxhwj 的帖子
非常感激dxhwjsdlkfj3 sdlkfj3 我觉得要根绝x和y的函数来了.
回复 #7 quwulin 的帖子
???根绝? 受益匪浅 这种测试我们称为控制测试,在电信软件及与硬件关系紧密的软件项目的单元测试中有广泛的应用。实际上,这种测试只需要判断各种输入时程序是否调用了应该调用的函数,至于返回值,在这种测试中意义不大,只要判断是否调用就行了,复杂一些的情形下,还要判断调用次数。
说来简单,做起来可不容易。Visual Unit 1.0也无法简单地完成这种测试,这里说一下2.0对这种测试的解决方法。如果使用2.0,可以在“用例助手”中,双击当前用例预期会调用的函数如a3,在弹出的对话框中,桩目标选择“仅设定预期执行次数”,“预期执行次数”使用默认值即至少一次(也可以设定大于小于或等于某个次数,还可以设为不执行),点击确定就OK了。执行测试时,如果用例没有调用预期的子函数,就会报告错误。
用上述方法为每个用例设定预期调用的子函数,就可以完成完整的测试。
Visual Unit 2.0尚未发布。
[ 本帖最后由 VisualUnit 于 2007-6-28 22:55 编辑 ] sdlkfj2
页:
[1]