C++单元测试工具之CPPUnit使用

CppUnit[1]是Micheal Feathers由JUnit移植过来的一个在GNU LGPL条约下的并在sourcefogre网站上开源的C++单元测试框架。(转自百度)

本文是对cppunit的一个初步体验,将分别在windows 7和ubuntu 12上进行尝试

 

文章本着极端细致的原则,力求让每个第一次接触的人都能按照教程完整实现,同时文章也贴出了在这过程中所遇到的问题及其解决方法

 

本文写于几个月以前,现整理发表于本博客,有点粗糙,还烦见谅

如果影响阅读,还请指出

 

1.首先来段windows版cppunit安装教程:

 

1)首先下载cppunit最新版本(cppunit-1.12.1.tar.gz),解压(如E:\ProgramFiles),文件夹目录如下

 

2)对于vs2010,需要进行如下修改

(1)修改目标文件名

进入cppunit目录下src文件夹,用vc程序(vs2010)打开CppUnitLibraries文件,提示需要转换,选择转换,对于vs2010,需要进行额外的对目标文件夹的修改。

右键cppunit,选择属性,在弹出窗口将目标文件名由$(ProjectName)改成$(ProjectName)d,如下

 

同样的将cppunit_dll的目标文件名改成cppunitd_dll

 

将DllPlugInTester改成$(ProjectName)d_dll

将TestPlugInRunner的改成$(ProjectName)d

将TestRunner的改成$(ProjectName)d

(2)修改DSPlugin

右键属性à配置属性à链接器à高级à无入口点,由“否”改成“是(/NOENTRY)”,如下

 

(3)最后再修改TestRunner

在vs中打开TestRunner\UserInterface\ MsDevCallerListCtrl.cpp,在67行中将version由7.0改成8.0,如下

 

3)接下来编译生成lib库

在vs中选择生成-->批生成,全选后点击生成,如下

 

过一会,等待编译结束,这过程可能会有一些提示说错误或失败,不用管,最后我的编译结果如下

 

进入cppunit-1.12.1\lib文件夹,出现如下即可(我们在使用时主要使用cppunitd.lib,所以这个库文件一定要有)

 

到此windows版cppunit安装编译成功。

 

 

2. linux版cppunit安装:

首先下载cppunit-1.12.1.tar.gz,接下来按下图配置(如果直接./configure会如下报错)

(../../src/cppunit/.libs/libcppunit.so: undefined reference to`dlsym' 

../../src/cppunit/.libs/libcppunit.so:undefined reference to `dlopen' 

../../src/cppunit/.libs/libcppunit.so: undefined referenceto `dlclose')

 

然后make, make install即可。

到此linux版cppunit安装编译成功。

 

 

3. windows版 cppunit使用案例

 

1)cppunit自带测试example

打开cppunit-1.12.1\examples\money文件夹的money.dsw文件

修改项目目标文件名

右键money工程名,配置属性-->常规-->目标文件名,将$(ProjectName)改成$(ProjectName)d

运行money工程。F5或ctrl+f5调试,出现如下即ok

 

2)  编写一个简单的Fibonacci的测试

(1)在vs2010中新建一个项目,配置如下

 

在工程中添加被测类的头文件和cpp文件

 

结果及这两个文件内容如下

 

         到此被测函数的类就定义好了。

         (2)接下来再添加一个用来测试Fibonacci类的项目,如下

 

 

 

 

(3)接下来首先在vs2010中配置测试项目的属性:

右键测试项目(test_Fibonacci),选择属性,添加cppunit的库文件和lib路径

 

两个都配置好后,内容应该如下

 

最后再添加cppunitd.lib链接库,如下,确定即可

 

(4)      在测试项目(test_Fibonacci)中添加刚刚在项目Fibonacci项目中新建的两个文件(fibonacci.h和fibonacci.cpp),添加后效果应该如下

 

这样在头文件中便包含了要测试的Fibonacci.h,源文件包含Fibonacci.cpp文件

(5)      编写测试类头文件和cpp文件

添加测试类头文件和cpp文件,如下图所示

 

test_Fibo.h和test_Fibo.cpp内容如下

 

(6)      最后在test_Fibonacci.cpp中编写main函数,如下

 

将test_Fibonacci项目设为启动项目,右键test_Fibonacci项目,选择“设为启动项目”。运行结果如下

 

考察如果结果不对,会不会报错?

测试fibonacci(5)==9,则结果如下

 到此win下使用结束

 

 

4. linux下cppunit使用Fibonacci测试(可先见win下cppunit使用)

(1)安装完cppunit后,首先同样新建Fibonacci类的头文件和cpp文件,如下

 

(下图内容应修改成红框所示,下同)

 

(2)然后再新建测试类的头文件和cpp文件,如下

 

 

(3)再添加个main.cpp

 

如下编译结果报错(其中gcc编译选项-L表示添加lib目录,-l表示添加include目录,-lcppunit表示在上述lib中寻找libcppunit.so动态库文件,如果加-static表示查找libcppunit.lib静态库文件)

 

         将cppunit的头文件复制到系统路径(原因:#include <>直接到系统指定的某些目录中去找某些头文件。#include “”先到源文件所在文件夹去找,然后再到系统指定的某些目录中去找某些头文件)。然后再次编译,

 

经过查看main.cpp发现CompileOutputter应该是CompilerOutputter(单词写错。。。),然后编译,报错undefined reference,如下

 

这个是因为库文件未添加成功。

(补充头文件和库文件的搜索顺序:

头文件搜索顺序:

1.      由参数-I指定的路径(指定路径有多个路径时,按指定路径的顺序搜索)

2.      然后找gcc的环境变量 C_INCLUDE_PATH, CPLUS_INCLUDE_PATH, OBJC_INCLUDE_PATH

3.      再找系统内定目录

动态库的搜索路径搜索的先后顺序是:

1.      编译目标代码时指定的动态库搜索路径;

2.      环境变量LD_LIBRARY_PATH指定的动态库搜索路径;

3.      配置文件/etc/ld.so.conf中指定的动态库搜索路径;

4.      默认的动态库搜索路径/lib;

5.      默认的动态库搜索路径/usr/lib。)

经过一番折腾后,原来是gcc命令的参数顺序不对,静态链接具体如下。

 

添加动态链接:

(添加路径到环境变量命令

exportLD_LIBRARY_PATH=/usr/local/CPP/lib:$LD_LIBRARY_PATH)

 

结果显示应该只执行测试了Fibonacci(3)==3,后面两个没有执行,于是修改成多个测试函数试试。修改test_Fibo.h和test_Fibo.cpp,如下

 

重新编译运行,结果还是一样,不知什么原因,似乎不是放在一个测试函数的原因。

经过一段时间的检查,终于发现问题,原来是main.cpp中未添加test_Fibo.cpp头文件,同时test_Fibo.cpp中也未添加正确的Fibonacci.cpp路径,其中也会报错undefined reference,经过以上修改后,再次编译运行,结果如下

 

最后附上测试成功的完整代码,各文件内容具体如下

 

 

 

 

 

 

 

 

 

 

 

posted @ 2013-11-20 13:53  IT_cnblogs  阅读(2102)  评论(0编辑  收藏  举报