CppUnit安装及使用指南-tlf_第1页
CppUnit安装及使用指南-tlf_第2页
CppUnit安装及使用指南-tlf_第3页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第一部分 CppUnit 安装1、解压 cppunit-1.12.0.tar.gz 后进入 cppunit-1.12.0 目录。(用 winrar 解压即可)2、在 vc6 中打开工作空间”examples/examples.dsw”,将 hostapp 设为 active project,然后按 F7构建。3、选择vc6的菜单项“buildbatachbuild”,点击对话框的“build”按钮。基本ok,除了最后的simple_plugin。观察编译结果,若除 simple_plugin 外,还有其他错误,则按以下方式进行解决。 错误提示:Error spawning cl.exeVC 中

2、点击esInclude Files,Library Files,Source Files”的路径。 因此问题可以按照以下方法解决:打开 vc 界面 点击(工具(选择“Directorie(目录重新设置esInclude File、 Library FilesSource Files”的路径。很多情况可能就一个盘符的不同(例如你的VC C,但是这些DOK 了。(vc vc 完全安装的情况下不会出现这种问题)executatble files:VC 安装目录CommonMSDev98Bin VC 安装目录VC98BINVC 安装目录CommonTOOLSVC 安装目录CommonTOOLSWINN

3、Tinclude files:VC 安装目录VC98INCLUDEVC 安装目录VC98MFCINCLUDE VC 安装目录VC98ATLINCLUDElibrary files:VC 安装目录VC98LIBVC 安装目录VC98MFCLIBsource files:VC 安装目录VC98MFCSRCVC 安装目录VC98MFCINCLUDE VC 安装目录VC98ATLINCLUDEVC 安装目录VC98CRTSRC 错误提示:Fatal error LINK1104: cannot open file “mfc42u.lib”网上下载 mfc42u.lib、mfc42ud.lib 即可。

4、错误提示:Error executing c:windowssystem32cmd.exe该错误可以忽略。4、打开 src/cppunitlibraries.dsw 后进行“batch build”。(若 testrunnerdsplugind.dll 构建失败,是因为 testrunnerdsplugin.dll 已经注册。 )5、打开 examples/examples.dsw 后将 cppunittestapp 设为 active project,然后运行 ok。6vc6 的菜单项“tools。选择“customize”对话框的“add-ins and macro files” “bro

5、wse.”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目录srccppunit”。第二部分 初识 CppUnit1、进入example 文件夹,用VC examples

6、.dsw。我们先来看看CppUnit 自带的测试例子。这些例子CppUnit 自身的单元测试集,一方面这是CppUnit CppUnit 另一方面,我们可以通过这些例子来学习如何在我们自己的工程中添加测试用例。2CppUnitTestApp 工程设为Active Project(Win32 Debug),编译后运行,则可以看到CppUnit 的GUITestRunner“Run”,将会看到如下界面,这是一个针对CppUnit 11个测试,全部通过。点击“Browse”,CppUnit 在 CppUnit 中,最小的测试单元,称为测试方法),而多个相关的测试方法又可以组成一个TestCase 测

7、试用例。多个测试用例又组成TestSuite 测试包。测试包互相嵌套在一起,就形成了上面我们看到的树结构。我们可以选择其中任意的树节点来进行单元测试。3CppUnitTestMain Active Project(Win32 Debug),一个基于文本方式的单元测试环境。4HostApp Active Project(Win32 Debug),编译运行,得到如下界面,这亦是一个对CppUnit 自身进行的测试,只不过它向我们演示的是各种失败的测试。在基于GUI 不成功,进度条显示红色,反之则为绿色。从测试结果我们可以看到失败的单元测试名称,引起测试不能通过的原因,以及测试失败的语句所在的文件及

8、所在行数。第三部分 CppUnit 原理在 CppUnit 中,一个或一组测试用例的测试对象被称为 Fixture。Fixture 就是被测试的目标,可能是一个对象或者一组相关的对象,甚至一个函数。通常写一个 TestCase 的步骤包括: 初始化操作,比如:生成一组被测试的对象,初始化值; 按照要测试的某个功能或者某个流程对 fixture 进行操作; 验证结果是否正确; 清理工作,比如对 fixture 的及其他的资源进行释放等。对 fixture (1)、(4)部分代码都是相似的,CppUnit 在很多地方引入了setUp tearDown setUp 函数里完成(1)tearDown

9、函数中完成(4)代码。具体测试用例函数中只需要完成(2)、(3)CppUnit 会自动为每个测试用例函数运行setUptearDown,这样测试用例之间就没有交叉影响。class MathTest : public CppUnit:TestFixture protected:int m_value1, m_value2; public:MathTest() / class MathTest : public CppUnit:TestFixture protected:int m_value1, m_value2; public:MathTest() / 步骤(1)初始化函数void setUp

10、 () m_value1 = 2;m_value2 = 3;/ 测试加法的测试函数void testAdd () / 步骤(2)对 fixture 进行操作int result = m_value1 + m_value2;/ 步骤(3)验证结果是否争取CPPUNIT_ASSERT( result = 5 );/ 步骤(4)没有什么清理工作tearDown. void teardown () CPPUNIT_ASSERT(condition)/ 确信 condition CPPUNIT_ASSERT(condition)/ 确信 condition 为真CPPUNIT_ASSERT_MESSAG

11、E(message, condition)/当 condition为假时失败,并打印messageCPPUNIT_FAIL(message)/ 当前测试失, 并打印CPPUNIT_ASSERT_EQUAL(expected, actual)/ 确信两者相等CPPUNIT_ASSERT_EQUAL_MESSAGE(CPPUNIT_ASSERT_EQUAL_MESSAGE(message, expected, actual)message/失败的同时打印CPPUNIT_ASSERT_DOUBLES_EQUAL(expected, actual, delta)/ 当expected和actual之间

12、差大于delta 时失败CppUnit:TextUi:TestRunnerCppUnit:QtUi:TestRunner CppUnit:MfcUi:TestRunner/ 文本方式的TestRunner/ QT 方式的TestRunner/ MFC 方式的TestRunner要把对 fixture 的一个测试函数转变成一个测试用例,需要生成一个CppUnit: TestCaller 终运行整个应用程序的测试代码的时候,可能需要同时运行对一个 fixture 的多个测试函数,甚至多个fixture CppUnit 中把这种同时运行的测试案例的集合称为 TestSuite。而 CppUnit:T

13、extUi:TestRunnerCppUnit:QtUi:TestRunner CppUnit:MfcUi:TestRunner/ 文本方式的TestRunner/ QT 方式的TestRunner/ MFC 方式的TestRunnerCppUnit:TextUi:TestRunner runner; CppUnit:TestSuite *suiteCppUnit:TextUi:TestRunner runner; CppUnit:TestSuite *suite= new CppUnit:TestSuite();/ 添加一个测试用例suite-addTest(new CppUnit:Test

14、Caller (testAdd, testAdd);/ 指定运行TestSuite runner.addTest( suite / 开始运行, 自动显示测试进度和测试结果runner.run( true );/ Run all tests and wait第四部分 模拟测试代码编写(一)简单方法1、新建 Win32 Console Application 工程,命名为“dd”(可取其它名字),并指定存储路径;2、在测试项目中设置(非常重要)VC 中,在菜单中,选择Project SettingsC/C+Category 列表中选择C+ Languag,选择enable Run-Time Typ

15、e Information (RTTI)。VC Project SettingsC/C+Category 列表中选择Code generation, Use run-time library Debug 版,选择Debug Multithreaded release 版,选择Multithreaded DLL;VC中,在菜单中,选择ProjectSettingsLinkObject/librarymodules中添入需要的lib 文件:cppunitX.lib (debugcppunitd.lib, release 模式为cppunit.lib )、testrunnerX.lib(debug

16、testrunnerd.librelease Unicodetestrunnerud.librelease Unicode testrunneru.lib)MathTest”5、修改文件“MathTest.cpp”6、修改 main 函数7、编译,若编译出错,请验证是否按照第 2 步进行了相应设置。以下解决方式仅作参考。 错误提示:error C2039: TestCaller : is not a member of CppUnit该错误对应的错误代码行为:“ suite-addTest(new CppUnit:TestCaller (testAdd,&MathTest:testAdd)aT

17、estCallerMathTest,请查看是否包含头文件:#include mathtest.h bMathTest CppUnit:TestFixture 错误提示:error LNK2001: unresolved external symbol public: virtualthiscall CppUnit: TextTestRunner:TextTestRunner(void)(?1TextTestRunnerCppUnitUAEXZ)选择 vc6 的菜单栏 Project SettingsLink,添加需要的lib 文件:cppunitd.lib、testrunnerd.lib 错误

18、提示:error C2653: CppUnit : is not a class or namespace name该错误对应的错误代码行为“class MathTest: public CppUnit:TestFixtur,是因为未包含头件:#include cppunit/extensions/HelperMacros.h8、运行,以下是测试成功界面及测试失败界面。(二)使用 TestSuite按照上面的方式,如果要添加新的测试用例,需要把每个测试用例添加到 TestSuite 的 TestFixture 需要把相对应的所有头文件(即每一个测试集合定义所在的头文件)添加到 main 函数所CppUnit 提供了 CppUnit:TestSuiteBuilder,CppUnit:TestFactoryRegistry 和一堆宏,用来方便地把 TestFixture 和测试

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论