C/C++单元测试理论精要(七)
2.2 解决可测性问题
上一节具体分析了可测性问题,接下来,我们来看看如何解决这些问题。下图中,彩色的部分是需要解决的可测性的具体的问题。
与其他代码隔离
为了提高效率,应该一次性将一位工程师负责的测试任务隔离出来。隔离时,应把源文件分为三类:被测文件,外围文件,其他文件。被测文件是测试目标,外围文件是指与被测文件关联密切的底层或相关文件,这些在测试时最好直接调用实际代码,减少打桩造成的失真,其他文件则完全隔离。
上图是隔离测试任务的示意界面,只要将要测试的文件设为T,不需要测试或者是别的工程师负责测试,但可能需要实际调用的文件设N。其他文件是缺省的X,工具会视需要自动打桩。这样就将测试任务一次性隔离出来了,现在,不管原来的项目多大,测试任务都可以独立编译运行。
解决编译差异和平台差异
跨平台单元测试,例如在PC上测试嵌入式项目,或在windows上测试Linux项目,由于编译环境可能不同,代码中通常会出现一些非标准的特殊关键字,以及数据长度可能不同。这些差异可以用工具自动解决。
上图是解决编译差异和平台差异的示意界面。工具可以自动屏蔽特殊关键字或代码片断,也可以转定义关键字来解决数据长度差异。这样,在不修改产品代码的前提下,可以比较便利地解决编译差异和平台差异。
“可编程的桩”不能解决内部输入
也许很多人都会认为,编写桩代码可以解决内部输入问题,内部输入有六种情形,我们来具体分析一下。
自然输入:自然输入调用实际代码,是不需要特别解决的,跟桩无关。
不可控:不可控调用的也是实际代码,不是调用桩代码,因此也不能解决。也许有人会问,另外编写桩代码来代替实际代码行不行?在应该调用实际代码的时候,要想调用桩代码可能是很麻烦的,例如,底层函数位于同一个文件,或同一个类,如何去调用桩?
难于初始化:也是调用实际代码。
静态输入:静态输入只涉及到局部静态变量,没有调用底层函数,当然也不能用桩来代替。
中断输入:中断输入在不确定位置,中断调用不确定的代
相关文档:
mmap是linux下的CreateFileMapping,用来映射并同步文件。
这样的话,比如我自定义一种文件格式,把它写入到文件中,现在想修改其中的值,就可以用这个函数,把文件映射到内存中
然后用操作数组的方式,来进行文件的同步。如果不用这个函数就得:
1、定义一个结构体
2、定义结构体数组
3、读取文件(w+)
4、修改文件 ......
在FC8中默认安装的有mysql,没有的话可以很方便的安装下。
默认的mysql的include文件目录在/usr/include/mysql
默认的mysql的lib文件夹在/usr/lib/mysql
这两个目录在我们编译时候需要到。
我的测试用的C代码为:
#include <stdio.h>
#include <stdlib.h>
#include <mysql.h>
#define CONN_HOST ......
C/C++是最主要的编程语言。这里列出了50名优秀网站和网页清单,这些网站提供c/c++源代码。这份清单提供了源代码的链接以及它们的小说明。我已尽力包括最佳的C/C++源代码的网站。这不是一个完整的清单,您有建议可以联系我,我将欢迎您的建议,以进一步加强这方面的清单。
1、http://snippets.dzone.com/tag/c/ --数以千计 ......
听起来,有自信,有搞笑。又自信,又搞笑。
两年前,考入了一个二流大学,非计算机专业。当初怀着无比美好的心情,只是希望在学校过的快乐些,学的好些,但是有些事情总是难以预料,我总是无法忘却那份怀念,在这个陌生的城市,我总是迷失了自己。默默的躲在自己的世界里舔舐伤口,原以为到了个新的环境能忘掉一切的伤心故 ......