




已阅读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伪对象 伪代码 classSale voidscan 调用设备SDK方法showLine 伪对象 指测试中用来替代单元测试环境中无法调用的对象 图例 在一个POS系统中Sale类 其中方法Scan 显示商品信息 伪代码 classSale Displaydisplay publicSale Diaplaydisplay this display display voidscan display showLine 2 2 2接缝模型 接缝 seam 在程序的一些特殊的点 可以不用修改源码就可以达到改动代码的行为 每个接缝点都有一个激活点 在这些点我们可以改变代码的行为 接缝类型 对象接缝链接接缝预处理期接缝 不适用 这里不做介绍 对象接缝 用子类去覆盖掉基类中的 图例 在一个POS系统中Sale类 其中方法Scan 显示商品信息 伪代码 classSale voidscan 调用设备SDK方法showLine 伪代码 classSale voidscan showLine virtualshowLine 调用设备SDK方法showLine 链接接缝 C 及很多语言在代码编译后 我们是可以在其链接期时改变其行为
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 临期退库管理制度
- 临潼疫情管理制度
- 2025年免疫治疗在自身免疫性皮肤病中的临床试验结果转化突破报告
- 丽水公厕管理制度
- 义务联防管理制度
- 书画室人员管理制度
- 云南公司管理制度
- 2025年历史文化街区保护与开发在城市更新中的实践研究报告
- 2025年历史文化街区保护与开发:历史文化传承与城市更新路径创新实践报告
- 交接车辆管理制度
- 2024年“安康杯”安全生产知识竞赛考试题库及答案
- 速度滑冰智慧树知到期末考试答案章节答案2024年哈尔滨师范大学
- 手术室不良事件分享
- 2020年10月自考00323西方行政学说史试题及答案含解析
- 屋顶光伏施工安全知识讲座
- 低空经济产业园商业计划书
- 养生祛病一碗汤
- 数学与艺术的关系
- 电力企业合规培训课件
- 《标本的采集与转运》课件
- 运用PDCA循环减少静脉用药集中调配贴签错误的探讨静配中心质量持续改进案例
评论
0/150
提交评论