版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Googletest框架和单元测试杭州 2011.10.12 内容 Googletest 框架 单元测试(Unit Testing) Googletest 框架 u Googletest 背景u xUnit简介u Googletest 特性u Googletest 环境搭建u Googletest 使用 1.1 Googletest 背景 Googletest是Googletest针对C+测试的开源项目,跨平台(Linux, Mac OS X, Windows, Cygwin, Windows CE, and Symbian)。 基于xUnit框架,有丰富的断言,自定义断言,事件机制,deat
2、h 测试,参数化测试,XML测试报告等。 应用案例:l Chromium projects (谷歌浏览器)l LLVM (Low Level Virtual Machine)l ProtocalBuffers (类似XML数据描述语言) 1.2 xUnit简介 每个测试依次执行的4个不同阶段:1、建立测试夹具(Fixture) ;2、与SUT(System Under Test)交互;3、验证结果;4、拆卸测试Fixture,返回初始状态。 测试 套件 对象 创建 创建 创建 测试 用例类 测试用 例对象 SUT 执行 执行 夹具 testMethod_n testMethod_1 testM
3、ethod_n 运行 套件 建立 执行 验证 拆卸 测试运行器 1.3 Googletest 特性 u 断 言u 事件机制u 参数化测试u 运行参数u death测试 断言宏分类: (1) ASSERT_*系列:检查点失败时,推出当前函数 (2) EXPECT_*系列:检查点失败时,继续往下执行 1.3.1 断 言 布尔值检查布尔值检查数值型检查数值型检查 字符串检查字符串检查浮点型检查浮点型检查 当断言检查出错时输出的信息并不能很好的帮助你还原当时出错的状况时,可以使用“” 操作符输出指定内容帮助分析出错原因。1.3.2 事件机制 Gtest事件机制分类:n 全局:发生在所有案例执行前后n
4、TestSuite:案例中所有案例执行前后n TestCase: 单个案例前后 全局事件全局事件 要实现全局事件,必须写一个类,继承testing:Environment类,实现里面的SetUp和TearDown方法。1. SetUp()方法在所有案例执行前执行2. TearDown()方法在所有案例执行后执行 TestSuite事件事件 需要实现一个类,继承testing:Test,然后实现两个静态方法1. SetUpTestCase() 方法在第一个TestCase之前执行2. TearDownTestCase() 方法在最后一个TestCase之后执行 TestCase事件事件 Test
5、Case事件发生在每个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提供了一系列的参数可以使我们对案例的执
6、行进行有效的控制。 1.3.4 运行参数 Gtest工程产生exe文件图运行输出案例表参数图示 测试案例集合参数测试案例集合参数参数列表参数列表 测试案例输出参数测试案例输出参数 测试案例异常处理参数测试案例异常处理参数1.3.5 death测试 在测试过程中,对于可能导致程序崩溃的输入,我们可以检查程序是否按预期的方式崩溃,验证崩溃结果。 注意事项: 1. 不要在死亡测试里释放内存。 2. 在父进程里再次释放内存。 3. 不要在程序中使用内存堆检查。 环境要求:Linux, Windows (requires MSVC 8.0 or above), Cygwin, and Mac (the
7、latter three are supported since v1.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相同则返
8、回 trueVS2008下简单实现示例 Windows 下正规表达式风格:Simple风格:GTEST_USES_SIMPLE_RE=1(预处理处添加) 1.4 Googletest 环境搭建 搭建步骤: (1) 设置gtest头文件路径 (2) 设置gtest.lib路径1.5 Googletest 使用 (1)创建单元测试工程 RUN_ALL_TESTS()宏功能:1.Saves the state of all Google Test flags. 2.Creates a test fixture object for the first test. 3.Initializes it v
9、ia SetUp(). 4.Runs the test on the fixture object. 5.Cleans up the fixture via TearDown(). 6.Deletes the fixture. 7.Restores the state of all Google Test flags. 8.Repeats the above steps for the next test, until all tests have run. (2)在待测试的类头文件中添加gtest头文件 (3)在待测试的类头文件中添加测试单元声明 此声明实质为待测试类添加友类,下图为gtes
10、t源码: (4)实现测试案例实体和所需的事件机制 宏(TEST/TEST_F)源码分析: (5)验证和查看单元测试结果 单元测试(Unit Testing) u Unit Testing u 单元测试实例分析 2.1 Unit Testing 单元测试单元测试:简单的讲独立的测试每一个函数 良好单元测试的品质良好单元测试的品质: ( 1 ) 运行速度快(0.1s); ( 2 ) 定位问题所在 以下测试不是单元测试以下测试不是单元测试: ( 1 ) 与数据库有交互 ; ( 2 ) 进行了网络通信; ( 3 ) 调用了文件系统; ( 4 ) 需要对环境做特定的准备和配置; 关键:解依赖关键:解依赖
11、原则:源代码在产品阶段和测试阶段应该是完全一样原则:源代码在产品阶段和测试阶段应该是完全一样的的2.2 单元测试场景实例分析 在实际编写单元测试中,在单元测试之前的一些对函数所用的初始化操作通常并不能满足需要,常规的方法并不能解决一些复杂的问题。 例如函数中涉及到对设备sdk调用、socket通信、工程中依赖的一些第三方库函数的引用等等。单元测试中并不需要对这些纳入到测试中,我们只需要模拟这些调用产生的结果返回到需要测试的函数即可。 针对以上问题常用处理方法: 伪对象 接缝模型 2.2.1 伪对象伪代码: class Sale void scan() . 调用设备SDK方法showLine()
12、; . 伪对象:指测试中用来替代单元测试环境中无法调用的对象。 图例: 在一个POS系统中Sale类,其中方法Scan()显示商品信息。 伪代码:class Sale Display display; public Sale(Diaplay display) this.display=display; void scan() display.showLine(); 2.2.2 接缝模型 接缝(seam):在程序的一些特殊的点,可以不用修改源码就可以达到改动代码的行为。 每个接缝点都有一个激活点,在这些点我们可以改变代码的行为。 接缝类型: 对象接缝 链接接缝 预处理期接缝(不适用,这里不做介绍
13、) 对象接缝Sale+Scan(barcode: string) 用子类去覆盖掉基类中的。 图例: 在一个POS系统中Sale类,其中方法Scan()显示商品信息。 伪代码: class Sale void scan() . 调用设备SDK方法showLine(); . 伪代码: class Sale void scan() . showLine(); . virtual showLine() 调用设备SDK方法showLine(); Sale+Scan(barcode: string)+virtual ShowLine()Sale+Scan(barcode: string)+virtual ShowLine()ChildSale+ShowLine()链接接缝 C+及很多语言在代码编译后,我们是可以在其链接期时改变其行为的。 预编译编 译 汇 编源程序 链链 接接 展开宏 处理条件编译指令处理条件编译指令 处理预编译指令 删除注释、加标识 . . . . . 词法分析 语法分析 语义分析 优化汇编代码 . . . . . 汇编码译为机器码 (目标文件.obj) . . . . . 地址和空间分配 符号决议 重定位 . . . . . 可执行应用程序 链接图示流程图示 本地本地实现调用第三方库
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 考虑宽频振荡的构网-跟网型混联系统研究
- 2025届广西南宁中学春季学期中考生物最后一模试卷含解析
- 初三数学应考指南
- 2024年云南理工职业学院高职单招职业适应性测试历年参考题库含答案解析
- 2024年上海工艺美术职业学院高职单招职业技能测验历年参考题库(频考版)含答案解析
- 阿坝2024下半年四川阿坝州级事业单位选调115人历年参考题库(频考版)含答案解析
- 妊娠期妇女的口腔保健
- 必考点01 坚持改革开放-(解析版)
- 8.1公平正义的价值原卷版
- 绍兴浙江绍兴市人民医院招聘编外工作人员历年参考题库(频考版)含答案解析
- 仓储培训课件模板
- 2023-2024学年仁爱版七上期末考试英语(试题)
- 2024年医院培训计划
- GB/T 44914-2024和田玉分级
- 2023年湖南出版中南传媒招聘笔试真题
- 2024年度企业入驻跨境电商孵化基地合作协议3篇
- 呼吸内科临床诊疗指南及操作规范
- 学生管理教育课件
- 世界职业院校技能大赛高职组“关务实务组”赛项参考试题及答案
- 高中历史教师资格考试面试试题及解答参考(2024年)
- 银行贷款房产抵押合同样本
评论
0/150
提交评论