C/C++单元测试理论精要(七)
2.2 解决可测性问题
上一节具体分析了可测性问题,接下来,我们来看看如何解决这些问题。下图中,彩色的部分是需要解决的可测性的具体的问题。
与其他代码隔离
为了提高效率,应该一次性将一位工程师负责的测试任务隔离出来。隔离时,应把源文件分为三类:被测文件,外围文件,其他文件。被测文件是测试目标,外围文件是指与被测文件关联密切的底层或相关文件,这些在测试时最好直接调用实际代码,减少打桩造成的失真,其他文件则完全隔离。
上图是隔离测试任务的示意界面,只要将要测试的文件设为T,不需要测试或者是别的工程师负责测试,但可能需要实际调用的文件设N。其他文件是缺省的X,工具会视需要自动打桩。这样就将测试任务一次性隔离出来了,现在,不管原来的项目多大,测试任务都可以独立编译运行。
解决编译差异和平台差异
跨平台单元测试,例如在PC上测试嵌入式项目,或在windows上测试Linux项目,由于编译环境可能不同,代码中通常会出现一些非标准的特殊关键字,以及数据长度可能不同。这些差异可以用工具自动解决。
上图是解决编译差异和平台差异的示意界面。工具可以自动屏蔽特殊关键字或代码片断,也可以转定义关键字来解决数据长度差异。这样,在不修改产品代码的前提下,可以比较便利地解决编译差异和平台差异。
“可编程的桩”不能解决内部输入
也许很多人都会认为,编写桩代码可以解决内部输入问题,内部输入有六种情形,我们来具体分析一下。
自然输入:自然输入调用实际代码,是不需要特别解决的,跟桩无关。
不可控:不可控调用的也是实际代码,不是调用桩代码,因此也不能解决。也许有人会问,另外编写桩代码来代替实际代码行不行?在应该调用实际代码的时候,要想调用桩代码可能是很麻烦的,例如,底层函数位于同一个文件,或同一个类,如何去调用桩?
难于初始化:也是调用实际代码。
静态输入:静态输入只涉及到局部静态变量,没有调用底层函数,当然也不能用桩来代替。
中断输入:中断输入在不确定位置,中断调用不确定的代
相关文档:
一. 何谓可变参数
int printf( const char* format, ...);
这是使用过C语言的人所再熟悉不过的printf函数原型,它的参数中就有固定参数format和可变参数(用”…”表示)。
而我们又可以用各种方式来调用printf,如:
printf("%d",value);
printf("%s",str);
printf("the number is %d ,st ......
鉴于在用C语言写一些字符串处理的程序时种种的不便,本人坚信"磨刀不误砍柴功"这个信条,于是在专门
进行了一次磨对C语言的磨刀,写了一些字符串的处理函数, 方便网友使用, 大家有好的解决方法也请告知一下.
我估计有一些C的库中肯定有比我这更好的函数, 但是本人没有找到, 望"行家"告知.
#include <string.h> ......
1.内存分配方式
内存分配方式有三种:
[1]从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。
[2]在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于 ......
因为项目要求,制作的一个多文件上传,并显示进度条一段代码(vs2005环境)。
(只为粗略的实现,代码并不规范)
当多个文件上传的时候,需要依次队列形式一个个上传,当上传某个文件的时候,锁定进程,上传完毕再开启锁。
在主类中的上传按钮事件代码:
//
获取openFileDialog控件选择的文件名数组(openFileDialog可 ......