CppUnit安装及使用

转自:http://wenku.baidu.com/view/a0a5867f27284b73f242508a.html

第一部分 CppUnit安装 

1、解压cppunit-1.12.0.tar.gz后进入cppunit-1.12.0目录。(用winrar解压即可)

2、在vc6中打开工作空间”examples/examples.dsw”,将hostapp设为activeproject,然后按F7构建。 

3、选择vc6的菜单项“buildàbatach build”,点击对话框的“build”按钮。基本ok,除了最后的simple_plugin

观察编译结果,若除simple_plugin外,还有其他错误,则按以下方式进行解决。

①错误提示:Error spawning cl.exe

在VC中点击“Tools”—>“Option”—>“Directories”,发现路径有误,重新设置“Excutable Fils,Include Files,Library Files,Source Files”的路径。因此问题可以按照以下方法解决:打开vc界面点击VC“TOOLS(工具)”—>“Option(选择)” —>“Directories(目录)”重新设置“Excutable Fils、Include Files、 Library Files、Source Files”的路径。很多情况可能就一个盘符的不同(例如你的VC装在C,但是这些路径全部在D),改过来就OK了。(至少vc绿色版是这样,vc完全安装的情况下不会出现这种问题)

executatble files:

VC安装目录\Common\MSDev98\Bin

VC安装目录\VC98\BIN

VC安装目录\Common\TOOLS

VC安装目录\Common\TOOLS\WINNT

include files:

VC安装目录\VC98\INCLUDE

VC安装目录\VC98\MFC\INCLUDE

VC安装目录\VC98\ATL\INCLUDE

library files:

VC安装目录\VC98\LIB

VC安装目录\VC98\MFC\LIB

source files:

VC安装目录\VC98\MFC\SRC

VC安装目录\VC98\MFC\INCLUDE

VC安装目录\VC98\ATL\INCLUDE

VC安装目录\VC98\CRT\SRC

②错误提示:Fatal error LINK1104: cannot openfile “mfc42u.lib”

网上下载mfc42u.lib、mfc42ud.lib即可。

③错误提示:Error executingc:\windows\system32\cmd.exe

该错误可以忽略。

4、打开src/cppunitlibraries.dsw后进行“batchbuild”。(若testrunnerdsplugind.dll构建失败,是因为testrunnerdsplugin.dll已经注册。 

5、打开examples/examples.dsw后将cppunittestapp设为activeproject,然后运行ok 

6、选择vc6的菜单项“tools> customize...”。选择“customize”对话框的“add-insand macro files”标签页。点击其中的“browse...”按钮,双击lib/testrunnerdsplugin.dll。(注册这个插件后,在随后的测试过程中,若出现错误,则双击错误后可以在vc6中打开相应行。)

7、选择vc6的菜单项“tools> options...”。选择“options”对话框的“directories”标签页。

·    选择“include files”,添加新项“cppunit-1.12.0目录\include”

·    选择“library files”,添加新项“cppunit-1.12.0目录\lib”

·    选择“source files”,添加新项“cppunit-1.12.0目录\src\cppunit”

第二部分初识CppUnit

1、进入example文件夹,用VC打开examples.dsw。我们先来看看CppUnit自带的测试例子。这些例子都是针对CppUnit自身的单元测试集,一方面这是CppUnit作者开发CppUnit框架过程中写的测试用例,另一方面,我们可以通过这些例子来学习如何在我们自己的工程中添加测试用例。

2、将CppUnitTestApp工程设为ActiveProject(Win32 Debug),编译后运行,则可以看到CppUnit的基于GUI方式进行单元测试TestRunner的界面。点击“Run”,将会看到如下界面,这是一个针对CppUnit的单元测试结果,它表明刚才我们做了11个测试,全部通过。

   点击“Browse”,我们还可以选择想要进行的单元测试。CppUnit将所有的单元测试按照树的结构来表示。在CppUnit中,最小的测试单元,称为TestMethod(测试方法),而多个相关的测试方法又可以组成一个TestCase测试用例。多个测试用例又组成TestSuite测试包。测试包互相嵌套在一起,就形成了上面我们看到的树结构。我们可以选择其中任意的树节点来进行单元测试。

3、将CppUnitTestMain工程设置为ActiveProject(Win32 Debug),编译并运行,得到如下界面,这是一个基于文本方式的单元测试环境。

4、将HostApp工程设置为ActiveProject(Win32 Debug),编译运行,得到如下界面,这亦是一个对CppUnit自身进行的测试,只不过它向我们演示的是各种失败的测试。在基于GUI的测试环境中,若测试不成功,进度条显示红色,反之则为绿色。从测试结果我们可以看到失败的单元测试名称,引起测试不能通过的原因,以及测试失败的语句所在的文件及所在行数。

第三部分 CppUnit原理

在 CppUnit中,一个或一组测试用例的测试对象被称为Fixture。Fixture就是被测试的目标,可能是一个对象或者一组相关的对象,甚至一个函数。

通常写一个TestCase的步骤包括: 

①初始化操作,比如:生成一组被测试的对象,初始化值;

②按照要测试的某个功能或者某个流程对fixture进行操作;

③验证结果是否正确;

④ 清理工作,比如对fixture的及其他的资源进行释放等。

对 fixture的多个测试用例,通常(1)、(4)部分代码都是相似的,CppUnit在很多地方引入了setUp和tearDown虚函数。可以在setUp函数里完成(1)初始化代码,而在 tearDown函数中完成(4)代码。具体测试用例函数中只需要完成(2)、(3)部分代码即可,运行时CppUnit会自动为每个测试用例函数运行 setUp,之后运行 tearDown,这样测试用例之间就没有交叉影响。

对 fixture的所有测试用例可以被封装在一个CppUnit::TestFixture的子类(命名惯例是[ClassName]Test)中。然后定义这个fixture的setUp和 tearDown函数,为每个测试用例定义一个测试函数(命名惯例是 testXXX)。

classMathTest :public CppUnit::TestFixture {

protected:

      intm_value1,m_value2;     

public:

MathTest() {}      

//步骤(1初始化函数

voidsetUp () {

      m_value1 =2;

      m_value2 =3;

}

//测试加法的测试函数

voidtestAdd () {

      //步骤2 fixture 进行操作

      intresult =m_value1 +m_value2;

      //步骤3验证结果是否争取

      CPPUNIT_ASSERT(result ==5 );

}

//步骤(4没有什么清理工作tearDown.

voidteardown() { }

}

 在测试函数中对执行结果的验证成功或者失败直接反应这个测试用例的成功和失败。CppUnit提供了多种验证成功失败的方式:

CPPUNIT_ASSERT(condition)                               //确信condition为真

CPPUNIT_ASSERT_MESSAGE(message, condition)       //condition为假时失败,并打印message

CPPUNIT_FAIL(message)                                      //当前测试失败,并打印message

CPPUNIT_ASSERT_EQUAL(expected, actual)        //确信两者相等

CPPUNIT_ASSERT_EQUAL_MESSAGE(message, expected, actual)      //失败的同时打印message

CPPUNIT_ASSERT_DOUBLES_EQUAL(expected, actual, delta)   //expectedactual之间差大于delta时失败

要把对 fixture的一个测试函数转变成一个测试用例,需要生成一个CppUnit::TestCaller对象。而最终运行整个应用程序的测试代码的时候,可能需要同时运行对一个 fixture 的多个测试函数,甚至多个fixture的测试用例。CppUnit中把这种同时运行的测试案例的集合称为TestSuite。而 TestRunner 则运行测试用例或者TestSuite,具体管理所有测试用例的生命周期。目前提供了 3类TestRunner,包括:

CppUnit::TextUi::TestRunner     // 文本方式的TestRunner

CppUnit::QtUi::TestRunner     // QT方式的TestRunner

CppUnit::MfcUi::TestRunner    // MFC方式的TestRunner

下面是一个TestRunner的例子:

CppUnit::TextUi::TestRunnerrunner;

CppUnit::TestSuite *suite=new CppUnit::TestSuite();

//添加一个测试用例

suite->addTest(new CppUnit::TestCaller<MathTest> ("testAdd", testAdd));

//指定运行TestSuite

runner.addTest(suite );

//开始运行,自动显示测试进度和测试结果

runner.run("",true );   // Run all tests and wait

第四部分模拟测试代码编写

(一)简单方法

1、新建Win32 Console Application工程,命名为“dd”(可取其它名字),并指定存储路径;

2、在测试项目中设置(非常重要)

①在VC中,在菜单中,选择ProjectàSettingsà'C/C++'àCategory列表中选择'C++ Language’,选择'enableRun-Time Type Information (RTTI)'。

②在VC中,在菜单中,选择ProjectàSettingsà'C/C++'àCategory列表中选择'Codegeneration',在Use run-time library列表中,对于Debug版,选择'DebugMultithreaded DLL',对于release版,选择'MultithreadedDLL';

③在VC中,在菜单中,选择ProjectàSettingsà'Link',在'Object/librarymodules'中添入需要的lib文件:cppunitX.lib(debug模式为cppunitd.lib,release模式为cppunit.lib)、testrunnerX.lib(debug模式为testrunnerd.lib,release模式为testrunner.lib,debug Unicode模式为testrunnerud.lib,release Unicode模式为testrunneru.lib)

3、新建测试类“MathTest”

4、修改文件“MathTest.h”

 

5、修改文件“MathTest.cpp”

6、修改main函数

7、编译,若编译出错,请验证是否按照第2步进行了相应设置。以下解决方式仅作参考。

①错误提示:error C2039: 'TestCaller' : is nota member of 'CppUnit'

该错误对应的错误代码行为:“suite->addTest(newCppUnit::TestCaller<MathTest> ("testAdd", &MathTest::testAdd));”,可能是以下原因造成:

a.'TestCaller'未能识别MathTest,请查看是否包含头文件:#include mathtest.h

b.类MathTest未继承自CppUnit::TestFixture

②错误提示:error LNK2001: unresolved externalsymbol "public: virtual __thiscall CppUnit:: TextTestRunner::~TextTestRunner(void)" (??1TextTestRunner@CppUnit@@UAE@XZ)

选择vc6的菜单栏ProjectàSettingsà'Link',添加需要的lib文件:cppunitd.libtestrunnerd.lib

③错误提示:error C2653: 'CppUnit' : is not aclass or namespace name

该错误对应的错误代码行为:“class MathTest  : public CppUnit::TestFixture”,是因为未包含头文件:#include"cppunit/extensions/HelperMacros.h"

8、运行,以下是测试成功界面及测试失败界面。

(二)使用TestSuite

按照上面的方式,如果要添加新的测试用例,需要把每个测试用例添加到TestSuite中,而且添加新的 TestFixture需要把相对应的所有头文件(即每一个测试集合定义所在的头文件)添加到 main函数所在文件中,比较麻烦。为此CppUnit提供了CppUnit::TestSuiteBuilder,CppUnit::TestFactoryRegistry和一堆宏,用来方便地把TestFixture和测试用例注册到 TestSuite中。

步骤同上,只是一些细节问题,以图示方式描述,请对照着来看。

(三)可视化方式

1、新建基于对话框的应用程序工程,命名为“gg”(可取其它名字),并指定存储路径;

2、在测试项目中进行相应设置(同上)

3、testrunnerd.dll拷贝至工程目录下(非常重要,TestRunner.dll为我们提供了基于GUI的测试环境。为了让我们的测试程序能正确的调用它,TestRunner.dll必须位于你的测试程序的路径下。)

4、修改InitInstance所在文件内容,替换为采用CppUnit的测试对话框,随后的测试过程将以图形方式显示。

5、新建测试类CplusTest

6、修改PlusTest.h

7、修改PlusTest.cpp

8、新建被测类“CPlusTest”(可参考“第五部分”)

 

9、编译运行,即可出现图形化界面。

点击Browse,可看到在测试代码编写过程中所设计的测试集合框架。

选定测试集合后,回到TestRunner对话框,点击Run,即可开始测试。

第五部分实际测试代码编写

1、新建Win32 Console Application工程,命名为“ee”(可取其它名字),并指定存储路径;

2、在测试项目中进行相应设置(同“第四部分”)

3、新建测试类MyTest

4、修改文件MyTest.h”

5、修改文件MyTest.cpp

6、修改main函数

7、添加被测类CmyPlus

8、编译运行。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值