VS2005下使用CPPUNIT进行单元测试(全过程)_第1页
VS2005下使用CPPUNIT进行单元测试(全过程)_第2页
VS2005下使用CPPUNIT进行单元测试(全过程)_第3页
VS2005下使用CPPUNIT进行单元测试(全过程)_第4页
全文预览已结束

下载本文档

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

文档简介

VS2005下使⽤CPPUNIT进⾏单元测试(全过程)⼀、单元测试与CPPUNIT简介⼏乎每个开发⼈员都写过测试代码,但是往往这些代码不系统,也没有良好的管理,同时在测试代码编写过程中也有很多重复的劳动,⽐较繁琐。在⼀个软件开发过程中,往往会进⾏很多修改,迭代开发的模型随处可见,如何验证程序的功能、性能和结构是否符合要求是⼀项重要的⼯作。单元测试是属于⽩盒测试和结构性测试,⼀般由开发⼈员开展,当然如果有好的测试⼯具⽀持,测试⼈员甚⾄最终⽤户都可以参与。单元测试框架是编写和运⾏单元测试的软件⼯具,⽤来构建测试、运⾏测试、报告测试结果。对于C/C++开发,⽐较著名的收费单元测试⼯具是C++Test,免费开源的则是CPPUNIT。CPPUNIT是基于LGPL的开源项⽬,最初版本移植⾃JUNIT,是⼀个⾮常优秀的开源测试框架。CPPUNIT和JUNIT⼀样主要思想来源于极限编程。主要功能就是对单元测试进⾏管理,并可进⾏⾃动化测试。CPPUNIT设计遵循很多设计模式,代码结构也相对好理解。⼆、CPPUNIT安装、使⽤和框架1.安装1).解压cppunit-1.12.0.tar.gz到C:/cppunit-1.12.1;2).打开src/CppUnitLibraries.dsw,如果是VC7及以上版本,会有⼀个对话框询问是否将⼯程转换成更⾼版本,选择“Yestoall”进⾏转换;3).打开“Build”菜单,选择“BatchBuild...”,弹出“BatchBuild...”对话框后点击“SelectAll”,然后Build。a.链接过程中会报错:errorC3505:cannotloadtypelibrary'{80CC9F66-E7D8-4DDD-85B6-D9E6CD0E93E2}'出错的⽂件是:src/msvc6/testrunner/MsDevCallerListCtrl.cpp。这是由于使⽤VC8.0编译的缘故,需要修改⼀下它的源码,打开该⽂件,找到出错⾏(#67),将其替换为:#if_MSC_VER>=1400//VC++8ormore//Thefollowing#importimportsEnvDTEbasedonitsLIBID.#import"libid:80cc9f66-e7d8-4ddd-85b6-d9e6cd0e93e2"version("8.0")lcid("0")raw_interfaces_onlynamed_guids//Thefollowing#importimportsEnvDTE80basedonitsLIBID.#import"libid:1A31287A-4D7D-413e-8E32-3B374931BD89"version("8.0")lcid("0")raw_interfaces_onlynamed_guids#else//vc7#import"libid:80cc9f66-e7d8-4ddd-85b6-d9e6cd0e93e2"version("7.0")lcid("0")raw_interfaces_onlynamed_guids#endifb.另外还有⼀个错误:errorC1189:#error:Thisadd-inisforVC++6.0only。发⽣这个错误的是⼯程“DSPlugIn”,这只是个插件,没有也不影响CPPUnit的使⽤,因此可以⽆视这条错误。再次编译,可以从lib⽂件夹中找到所有的静态库⽂件及动态库⽂件。4).将include和lib⽂件夹加⼊到VC++的环境中。打开:Tools|Options|ProjectsandSolutions|VC++Directories,将这两个⽂件夹的路径分别加⼊到Includefiles和Libraryfiles中。最好再将lib⽂件夹加⼊到系统环境变量PATH中,这样就不⽤再将其中的动态链接库拷到⼯程⽬录下⽽直接运⾏单元测试了。⾄此,CPPUnit的编译安装就完成了。5).使⽤CPPUnitProjectWizard向导创建⽀持使⽤CPPUnit的测试类的VisualStudio2005项⽬,⽤这个向导⽣成的代码,只是⽣成⼀个动态库,有DllPlugInTesterd_dll.exe来调取这个动态库测试,个⼈感觉⽤处不⼤。b.复制⽂件CPPUnitProjectWizard.vsdir-为向导命名CPPUnitProjectWizard.vsz-让VS8知道从哪⾥找到向导到您的VisualStudio8安装⽬录下的VCProjects⽂件夹中,C:/ProgramFiles/MicrosoftVisualStudio8/VC/vcprojects。c.把整个CPPUnitProjectWizard解决⽅案⽂件夹复制到您的VisualStudio8安装⽬录下的VCWizards⽂件夹中。⽐如,我放在c:/ProgramFiles/MicrosoftVisualStudio8/VC/VCWizards/CPPUnitProjectWizard/CPPUnitProjectWizard或者,也可以放在你想放置的其它地⽅,然后编辑CPPUnitProjectWizard.vsz,定义参数ABSOLUTE_PATHParam="ABSOLUTE_PATH=c:/ProgramFiles/MicrosoftVisualStudio8/VC/VCWizards/CPPUnitProjectWizard/CPPUnitProjectWizard"d.该项⽬需要定义环境变量CPPUNITDIR⽐如,我的环境变量CPPUNITDIR=D:/cppunit-1.12.1最后,修改环境变量%PATH%,在PATH路径中,增加%CPPUNITDIR%/lib,以便程序加载时能找到cppunit_dll.dlle.在开发环境中,设置好Include/Lib路径%CPPUNITDIR%/Include%CPPUNITDIR%/LIB2.使⽤参考:3.框架本节把CPPUNIT的框架分为三个部分进⾏简单介绍。1)测试对象族CPPUNIT的测试对象的类关系图:Test:所有测试对象类的抽象基类,主要是定义run⽅法和统计⼦对象个数和查找遍历⼦对象的⽅法;TestFixture:该类⾮常简单,只定义了两个⽅法setUp和tearDown,作为测试对象的准备和拆除⽅法,⼀般⽤户编写的测试类都直接继承它;TestComposite、TestLeaf:根据设计模式中组合模式⽽设计的两个类,都继承⾃Test;TestSuite:具体化了TestComposite的内容存储⽅式、添加⼦对象接⼝等等。该类对象包含了若⼲测试对象,作为测试对象的容器,⽽且可以嵌套;TestRunner:控制测试对象的构造和测试对象执⾏的类;TestCase:定义了⼀个测试对象要实现的具体接⼝,同时继承TestFixture的setUp和tearDown;接⼝TestCaller:使⽤了设计模式中的策略模式,作为测试对象的最终封装类,提供了测试运⾏的策略,在测试执⾏中扮演了重要的⾓⾊。它是⼀个模板类。2)信息收集与显⽰族CPPUNIT的测试信息收集与显⽰的类关系图Outputter:是所有测试输出类的抽象基类,定义了write⽅法;CompilerOutputter:以编译器信息类似⽅式输出测试信息,使⽤TestResultCollector获取测试信息;TextOutputter:以⽂本流的⽅式输出测试信息,同样使⽤TestResultCollector获取测试信息;TestListener:以设计模式中观察者模式定义了Observer所应该具有的从TestResult获取测试步骤信息的⽅法;TestSuccessListener:实现了TestListener接⼝,同时继承了SynchronizedObject了从⽽具有线程安全性;SynchronizedObject:该类实现了lock和unlock操作;ExclusiveZone:使⽤SynchronizedObject进⾏了临界区的加锁和解锁操作;TestResult:这个测试信息的收集者,在观察者模式中扮演Subject⾓⾊,是它把测试的各个步骤的信息通知到所有Listener对象的。3)测试对象管理族CPPUNIT测试对象管理类关系图TestFactory:运⽤了设计模式中⼯⼚设计模式,这⾥只定义了⼀个makeTest⽅法,是⼀个抽象基类;TestSuiteFactory:该类继承⾃TestFactory,⽽且是模板类,是⽣成TestSuite对象的⼯⼚;TestFactoryReg

温馨提示

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

评论

0/150

提交评论