• 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中打开TestRunnerUserInterface MsDevCallerListCtrl.cpp,在67行中将version由7.0改成8.0,如下

    3)接下来编译生成lib库

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

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

    进入cppunit-1.12.1lib文件夹,出现如下即可(我们在使用时主要使用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.1examplesmoney文件夹的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,经过以上修改后,再次编译运行,结果如下

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

  • 相关阅读:
    [20190502]给显示输出加入时间戳.txt
    [20190423]oradebug peek测试脚本.txt
    [20190423]简单测试latch nowilling等待模式.txt
    [20190423]那个更快的疑问3.txt
    [20190419]shared latch spin count 2.txt
    [20190419]shared latch spin count.txt
    [20190418]exclusive latch spin count.txt
    [20190417]隐含参数_SPIN_COUNT.txt
    Java写时复制CopyOnWriteArrayList
    Python 定义常量
  • 原文地址:https://www.cnblogs.com/abc123456789/p/3433401.html
Copyright © 2020-2023  润新知