CppUnit安装及使用指南tlf.docx
- 文档编号:14305275
- 上传时间:2023-06-22
- 格式:DOCX
- 页数:16
- 大小:227KB
CppUnit安装及使用指南tlf.docx
《CppUnit安装及使用指南tlf.docx》由会员分享,可在线阅读,更多相关《CppUnit安装及使用指南tlf.docx(16页珍藏版)》请在冰点文库上搜索。
CppUnit安装及使用指南tlf
第一部分CppUnit安装
1、解压cppunit-1.12.0.tar.gz后进入cppunit-1.12.0目录。
(用winrar解压即可)
2、在vc6中打开工作空间”examples/examples.dsw”,将hostapp设为activeproject,然后按F7构建。
3、选择vc6的菜单项“buildbatachbuild”,点击对话框的“build”按钮。
基本ok,除了最后的simple_plugin。
观察编译结果,若除simple_plugin外,还有其他错误,则按以下方式进行解决。
①错误提示:
Errorspawningcl.exe
在VC中点击“Tools”—>“Option”—>“Directories”,发现路径有误,重新设置“ExcutableFils,IncludeFiles,LibraryFiles,SourceFiles”的路径。
因此问题可以按照以下方法解决:
打开vc界面点击VC“TOOLS(工具)”—>“Option(选择)”—>“Directories(目录)”重新设置“ExcutableFils、IncludeFiles、LibraryFiles、SourceFiles”的路径。
很多情况可能就一个盘符的不同(例如你的VC装在C,但是这些路径全部在D),改过来就OK了。
(至少vc绿色版是这样,vc完全安装的情况下不会出现这种问题)
executatblefiles:
VC安装目录\Common\MSDev98\Bin
VC安装目录\VC98\BIN
VC安装目录\Common\TOOLS
VC安装目录\Common\TOOLS\WINNT
includefiles:
VC安装目录\VC98\INCLUDE
VC安装目录\VC98\MFC\INCLUDE
VC安装目录\VC98\ATL\INCLUDE
libraryfiles:
VC安装目录\VC98\LIB
VC安装目录\VC98\MFC\LIB
sourcefiles:
VC安装目录\VC98\MFC\SRC
VC安装目录\VC98\MFC\INCLUDE
VC安装目录\VC98\ATL\INCLUDE
VC安装目录\VC98\CRT\SRC
②错误提示:
FatalerrorLINK1104:
cannotopenfile“mfc42u.lib”
网上下载mfc42u.lib、mfc42ud.lib即可。
③错误提示:
Errorexecutingc:
\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-insandmacrofiles”标签页。
点击其中的“browse...”按钮,双击lib/testrunnerdsplugin.dll。
(注册这个插件后,在随后的测试过程中,若出现错误,则双击错误后可以在vc6中打开相应行。
)
7、选择vc6的菜单项“tools>options...”。
选择“options”对话框的“directories”标签页。
∙选择“includefiles”,添加新项“cppunit-1.12.0目录\include”。
∙选择“libraryfiles”,添加新项“cppunit-1.12.0目录\lib”。
∙选择“sourcefiles”,添加新项“cppunit-1.12.0目录\src\cppunit”。
第二部分初识CppUnit
1、进入example文件夹,用VC打开examples.dsw。
我们先来看看CppUnit自带的测试例子。
这些例子都是针对CppUnit自身的单元测试集,一方面这是CppUnit作者开发CppUnit框架过程中写的测试用例,另一方面,我们可以通过这些例子来学习如何在我们自己的工程中添加测试用例。
2、将CppUnitTestApp工程设为ActiveProject(Win32Debug),编译后运行,则可以看到CppUnit的基于GUI方式进行单元测试TestRunner的界面。
点击“Run”,将会看到如下界面,这是一个针对CppUnit的单元测试结果,它表明刚才我们做了11个测试,全部通过。
点击“Browse”,我们还可以选择想要进行的单元测试。
CppUnit将所有的单元测试按照树的结构来表示。
在CppUnit中,最小的测试单元,称为TestMethod(测试方法),而多个相关的测试方法又可以组成一个TestCase测试用例。
多个测试用例又组成TestSuite测试包。
测试包互相嵌套在一起,就形成了上面我们看到的树结构。
我们可以选择其中任意的树节点来进行单元测试。
3、将CppUnitTestMain工程设置为ActiveProject(Win32Debug),编译并运行,得到如下界面,这是一个基于文本方式的单元测试环境。
4、将HostApp工程设置为ActiveProject(Win32Debug),编译运行,得到如下界面,这亦是一个对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:
publicCppUnit:
:
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)//当expected和actual之间差大于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=newCppUnit:
:
TestSuite();
//添加一个测试用例
suite->addTest(newCppUnit:
:
TestCaller
//指定运行TestSuite
runner.addTest(suite);
//开始运行,自动显示测试进度和测试结果
runner.run("",true);//Runalltestsandwait
第四部分模拟测试代码编写
(一)简单方法
1、新建Win32ConsoleApplication工程,命名为“dd”(可取其它名字),并指定存储路径;
2、在测试项目中设置(非常重要)
①在VC中,在菜单中,选择ProjectSettings'C/C++'Category列表中选择'C++Language’,选择'enableRun-TimeTypeInformation(RTTI)'。
②在VC中,在菜单中,选择ProjectSettings'C/C++'Category列表中选择'Codegeneration',在Userun-timelibrary列表中,对于Debug版,选择'DebugMultithreadedDLL',对于release版,选择'MultithreadedDLL';
③在VC中,在菜单中,选择ProjectSettings'Link',在'Object/librarymodules'中添入需要的lib文件:
cppunitX.lib(debug模式为cppunitd.lib,release模式为cppunit.lib)、testrunnerX.lib(debug模式为testrunnerd.lib,release模式为testrunner.lib,debugUnicode模式为testrunnerud.lib,releaseUnicode模式为testrunneru.lib)
3、新建测试类“MathTest”
4、修改文件“MathTest.h”
5、修改文件“MathTest.cpp”
6、修改main函数
7、编译,若编译出错,请验证是否按照第2步进行了相应设置。
以下解决方式仅作参考。
①错误提示:
errorC2039:
'TestCaller':
isnotamemberof'CppUnit'
该错误对应的错误代码行为:
“suite->addTest(newCppUnit:
:
TestCaller
:
testAdd));”,可能是以下原因造成:
a.'TestCaller'未能识别MathTest,请查看是否包含头文件:
#includemathtest.h
b.类MathTest未继承自CppUnit:
:
TestFixture
②错误提示:
errorLNK2001:
unresolvedexternalsymbol"public:
virtual__thiscallCppUnit:
:
TextTestRunner:
:
~TextTestRunner(void)"(?
?
1TextTestRunner@CppUnit@@UAE@XZ)
选择vc6的菜单栏ProjectSettings'Link',添加需要的lib文件:
cppunitd.lib、testrunnerd.lib
③错误提示:
errorC2653:
'CppUnit':
isnotaclassornamespacename
该错误对应的错误代码行为:
“classMathTest:
publicCppUnit:
:
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、新建Win32ConsoleApplication工程,命名为“ee”(可取其它名字),并指定存储路径;
2、在测试项目中进行相应设置(同“第四部分”)
3、新建测试类MyTest
4、修改文件MyTest.h”
5、修改文件MyTest.cpp
6、修改main函数
7、添加被测类CmyPlus
8、编译运行。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- CppUnit 安装 使用指南 tlf
![提示](https://static.bingdoc.com/images/bang_tan.gif)