问一个单元测试的问题
大家都知道,做单元测试的时候,往往对被测试函数写驱动以及桩桩和驱动都比较容易理解,但是在实际写驱动的过程中遇到一个问题.
问题描述如下:
这是被测试代码:
int main()
{
int i, l = 0;
for (i = 3; i < 65536; i += 2) {
int j, k, m = 1;
k = sqrt(i)+1;
for (j = 3; j < k; j += 2) {
if (i % j == 0) {
m = 0;
break;
}
}
if (m == 1) {
l++;
}
}
printf("%i\n", l);
return 0;
}
我们看到了,所要测试的是 main 函数!!!!
如何写驱动呢?
问题二:同样是这个函数,如果没有覆盖率的需求(既直接给这么一个函数,就要求做单元测试),那么我们自己是不是就要考虑覆盖率呢?
以该函数为例子,望解答................................ 这个函数是打印出3到65536之间的质数个数的吧,该函数根本就没有输入数据,要驱动干什么。。驱动本来就是接受测试数据并把它传送给被测单元的。
我觉得这个main()函数根本不需要测试。。它没有需要测试的接口什么的,而且语句覆盖100%,所有循环都跑到了。。
一定要测试的话,就程序插桩吧。。
个人意见,仅供参考。
[ 本帖最后由 guolm1225 于 2006-7-27 07:42 编辑 ] 呵呵。JJKUI说的有道理哦。觉得像是大学里程序设计后的调试。在加上头文件,在加上调用这个函数的一个语句直接在TC下编译调试后看运行结果就可以判断是否正确了。没有必要用驱动函数了。。。。。。。。
个人意见,仅供参考,如有异议,还请指教。 我感谢前面两位同学的解答
不过,注意到了没有,该main有返回值,既然有返回值的话,就应该要测试啊
正是考虑 main()可以直接运行,所以一直疑问怎么写驱动?
不是有main()就不用测试的,假设一个程序,把所有的功能都写到了 main()函数中(当然,这种写法不理想的),难道也不测试吗?当然不会
当然,这个是给的任务,不测也得测 千万不要陷入教条主义
1、这本来就是顶层函数,可以从外接受输入(当然这里不需要输入),还要写驱动干什么?
2、就这个对象而言,内部流程完全不受外部控制,是不需要考虑逻辑覆盖的。只要把它看成一个黑盒验证其结果是否正确就行了。
这样的代码为什么要写成MAIN函数?
感觉不符合编程的风格,封装在其它函数里,用MAIN函数调用不是更好?函数还可以重用。 要测的是主函数,而那又是个函数又没子模块,都相当于测整个程序了,又没界面,都可以看成是系统测试的,不知道这么想对不对! 同意六楼的说法,这样就可以将main 函数作为驱动来解决没有驱动的问题了。 而且这段程序输出的只有一个值而已,似乎与作者的原意不符。 测试需要依据,光一段代码就要测试?似乎太不规范了。同意 2楼的意见。
如果该程序要求输入一个3~65535之内的限制值x,打印3~x之间的质数个数那么还有点意思。
页:
[1]