51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

12
返回列表 发新帖
楼主: cdq1010
打印 上一主题 下一主题

单元测试的桩函数问题

[复制链接]

该用户从未签到

21#
发表于 2007-5-30 21:30:11 | 只看该作者
看完次帖,对驱动和桩的概念越发明白了,多谢楼上的各位师兄们,谢谢!
回复 支持 反对

使用道具 举报

该用户从未签到

22#
发表于 2007-6-1 12:17:43 | 只看该作者
请教~~!


举个B的桩函数的例子.

int stub_add_B(int x, int y)
{
   if ( (2 == x) &&(1 == y) ) //


写桩函数时,需要用具体数值代入,如果用例为多个时,是否需要每次在此处将x,y的值手动做更改.
     return 3;
   else //
在此处为何需要用else,因为A的驱动已做到返回异常情况。如果程序在此处会出现异常情况,有可能会在哪里出现问题?请举个例子
     return 9999; //返回 9999 是为了能够明显的看出程序的输出结果异常
}
回复 支持 反对

使用道具 举报

该用户从未签到

23#
发表于 2007-6-1 21:20:35 | 只看该作者
如果采用自顶向下的方法来测试,开发桩函数确实需要根据用例的设计来开发,
由此可见,开发桩函数是非常耗费工时的;所以一般企业都习惯采用自底向上的
方法来进行测试,这样可以避免桩函数的开发,而对于驱动的开发相对来说要轻松
一些,毕竟一个驱动可以采用循环来包含所有的测试用例。

至于这个桩函数B的例子,让它返回9999,是为了能够返回一个与正确输出数值3 有很大
差别的数字 而设计的。
如果根据用例设计了两个桩函数

int stub_add_B(int x, int y)
{
if((2 == x)&&(1 == y))
return 3;
else
return -1;
}

int stub_sub_C(int x, int y)
{
if((1== x)&&(2 == y))
return -1;
else
return 3;
}

那么在执行用例的时候,如果调用了错误的桩函数,
对于驱动 void drive_A() 就无法正常的打印信息。

所以,在设计桩函数的时候,返回的错误值最好选择一个不可能出现的数字,
这样进行错误判断的时候才能够更明显。

另外,需要指出的是,我们对函数A设计驱动和桩,其目的是为了测试函数A,
是为了能够测试A的条件判断是否正确,所以针对 x >=y 这个判定条件,我们
设计3个用例,(也就是说,设计3个桩函数)就能够覆盖了。
我们不是要测试B和C的功能,对于B,C 我们会单独测试。
一定要清楚我们测试的是哪一个函数,不要认为是将A,B,C三个函数一起测试。

不知道我将的是否清楚,见笑见笑。
回复 支持 反对

使用道具 举报

该用户从未签到

24#
发表于 2007-6-1 22:42:46 | 只看该作者
讲的很好啊
回复 支持 反对

使用道具 举报

该用户从未签到

25#
发表于 2007-6-2 10:57:17 | 只看该作者
seifer1754~讲的太好了~sdlkfj2 ~明白的很~DDD
回复 支持 反对

使用道具 举报

该用户从未签到

26#
发表于 2007-6-10 15:07:22 | 只看该作者

456

我要好好学习学习~
回复 支持 反对

使用道具 举报

该用户从未签到

27#
发表于 2007-8-1 16:58:08 | 只看该作者
问题1:我们要写的这个桩函数是不是就是函数C?

问题2:如果不是,那么我们是不是还要先对这个桩函数进行测试呢?


不是
桩函数是:在主函数未测试前,为了保证正确,模拟子函数

如果孤立测试的话,就单独测试3个函数A,B,C

自底向上测试,设置驱动函数分别测试函数B,C  再使用A,B,C一起测试

自顶想下测试,设立两个桩函数模拟B,C函数的功能
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-9-28 09:28 , Processed in 0.081920 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表