《GTest单元测试》PPT课件.ppt_第1页
《GTest单元测试》PPT课件.ppt_第2页
《GTest单元测试》PPT课件.ppt_第3页
《GTest单元测试》PPT课件.ppt_第4页
《GTest单元测试》PPT课件.ppt_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

Googletest框架和单元测试,杭州2011.10.12,内容,Googletest框架单元测试(UnitTesting),Googletest框架,Googletest背景xUnit简介Googletest特性Googletest环境搭建Googletest使用,1.1Googletest背景,Googletest是Googletest针对C+测试的开源项目,跨平台(Linux,MacOSX,Windows,Cygwin,WindowsCE,andSymbian)。基于xUnit框架,有丰富的断言,自定义断言,事件机制,death测试,参数化测试,XML测试报告等。应用案例:Chromiumprojects(谷歌浏览器)LLVM(LowLevelVirtualMachine)ProtocalBuffers(类似XML数据描述语言),1.2xUnit简介,每个测试依次执行的4个不同阶段:1、建立测试夹具(Fixture);2、与SUT(SystemUnderTest)交互;3、验证结果;4、拆卸测试Fixture,返回初始状态。,1.3Googletest特性,断言事件机制参数化测试运行参数death测试,断言宏分类:(1)ASSERT_*系列:检查点失败时,推出当前函数(2)EXPECT_*系列:检查点失败时,继续往下执行,1.3.1断言,布尔值检查,数值型检查,字符串检查,浮点型检查,当断言检查出错时输出的信息并不能很好的帮助你还原当时出错的状况时,可以使用“”操作符输出指定内容帮助分析出错原因。,1.3.2事件机制,Gtest事件机制分类:全局:发生在所有案例执行前后TestSuite:案例中所有案例执行前后TestCase:单个案例前后,全局事件,要实现全局事件,必须写一个类,继承testing:Environment类,实现里面的SetUp和TearDown方法。1.SetUp()方法在所有案例执行前执行2.TearDown()方法在所有案例执行后执行,TestSuite事件,需要实现一个类,继承testing:Test,然后实现两个静态方法1.SetUpTestCase()方法在第一个TestCase之前执行2.TearDownTestCase()方法在最后一个TestCase之后执行,TestCase事件,TestCase事件发生在每个TestCase执行前后1.SetUp()方法在每个TestCase执行前执行2.TearDown()方法在每个TestCase执行后执行,当被测函数需要传入不同的值时,可以考虑Gtest提供的参数化测试功能。,1.3.3参数化测试,INSTANTIATE_TEST_CASE_P(param1,param2,param3)param1:任意取;param2:测试案例的名称;param3:参数生成器(eg:testing:Values();,使用说明:,在运行Gtest时,Gtest提供了一系列的参数可以使我们对案例的执行进行有效的控制。,1.3.4运行参数,Gtest工程产生exe文件图,运行输出案例表参数图示,测试案例集合参数,参数列表,测试案例输出参数,测试案例异常处理参数,1.3.5death测试,在测试过程中,对于可能导致程序崩溃的输入,我们可以检查程序是否按预期的方式崩溃,验证崩溃结果。注意事项:1.不要在死亡测试里释放内存。2.在父进程里再次释放内存。3.不要在程序中使用内存堆检查。环境要求:Linux,Windows(requiresMSVC8.0orabove),Cygwin,andMac(thelatterthreearesupportedsincev1.3.0).,VS2008下简单实现示例,EXPECT_DEATH(statement,regex);1.statement是被测试的代码语句2.regex是一个正则表达式,用来匹配异常时在stderr中输出的内容,EXPECT_EXIT(statement,predicate,regex)1.statement是被测试的代码语句2.predicate在这里必须是一个委托,接收int型参数,并返回bool。只有当返回值为true时,死亡测试案例才算通过。,如果程序正常退出并且退出码与exit_code相同则返回true,VS2008下简单实现示例,Windows下正规表达式风格:Simple风格:GTEST_USES_SIMPLE_RE=1(预处理处添加),1.4Googletest环境搭建,搭建步骤:(1)设置gtest头文件路径(2)设置gtest.lib路径,1.5Googletest使用,(1)创建单元测试工程,RUN_ALL_TESTS()宏功能:1.SavesthestateofallGoogleTestflags.2.Createsatestfixtureobjectforthefirsttest.3.InitializesitviaSetUp().4.Runsthetestonthefixtureobject.5.CleansupthefixtureviaTearDown().6.Deletesthefixture.7.RestoresthestateofallGoogleTestflags.8.Repeatstheabovestepsforthenexttest,untilalltestshaverun.,(2)在待测试的类头文件中添加gtest头文件,(3)在待测试的类头文件中添加测试单元声明,此声明实质为待测试类添加友类,下图为gtest源码:,(4)实现测试案例实体和所需的事件机制,宏(TEST/TEST_F)源码分析:,(5)验证和查看单元测试结果,单元测试(UnitTesting),UnitTesting单元测试实例分析,2.1UnitTesting,单元测试:简单的讲独立的测试每一个函数良好单元测试的品质:(1)运行速度快(0.1s);(2)定位问题所在以下测试不是单元测试:(1)与数据库有交互;(2)进行了网络通信;(3)调用了文件系统;(4)需要对环境做特定的准备和配置;关键:解依赖原则:源代码在产品阶段和测试阶段应该是完全一样的,2.2单元测试场景实例分析,在实际编写单元测试中,在单元测试之前的一些对函数所用的初始化操作通常并不能满足需要,常规的方法并不能解决一些复杂的问题。例如函数中涉及到对设备sdk调用、socket通信、工程中依赖的一些第三方库函数的引用等等。单元测试中并不需要对这些纳入到测试中,我们只需要模拟这些调用产生的结果返回到需要测试的函数即可。针对以上问题常用处理方法:伪对象接缝模型,2.2.1伪对象,伪代码:classSalevoidscan().调用设备SDK方法showLine();.,伪对象:指测试中用来替代单元测试环境中无法调用的对象。图例:在一个POS系统中Sale类,其中方法Scan()显示商品信息。,伪代码:classSaleDisplaydisplay;publicSale(Diaplaydisplay)this.display=display;voidscan()display.showLine();,2.2.2接缝模型,接缝(seam):在程序的一些特殊的点,可以不用修改源码就可以达到改动代码的行为。每个接缝点都有一个激活点,在这些点我们可以改变代码的行为。接缝类型:对象接缝链接接缝预处理期接缝(不适用,这里不做介绍),对象接缝,用子类去覆盖掉基类中的。图例:在一个POS系统中Sale类,其中方法Scan()显示商品信息。,伪代码:classSalevoidscan().调用设备SDK方法showLine();.,伪代码:classSalevoidscan().showLine();.virtualshowLine()调用设备SDK方法showLine();,链接接缝,C+及很多语言在代码编译后,我们是可以在其链接期时改变其行为的。,预

温馨提示

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

评论

0/150

提交评论