《GTest单元测试》PPT课件.ppt

上传人:w****2 文档编号:14684465 上传时间:2020-07-28 格式:PPT 页数:43 大小:1.47MB
收藏 版权申诉 举报 下载
《GTest单元测试》PPT课件.ppt_第1页
第1页 / 共43页
《GTest单元测试》PPT课件.ppt_第2页
第2页 / 共43页
《GTest单元测试》PPT课件.ppt_第3页
第3页 / 共43页
资源描述:

《《GTest单元测试》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《GTest单元测试》PPT课件.ppt(43页珍藏版)》请在装配图网上搜索。

1、Googletest框架和单元测试,杭州 2011.10.12,内容,Googletest 框架 单元测试(Unit Testing),Googletest 框架,,Googletest 背景 xUnit简介 Googletest 特性 Googletest 环境搭建 Googletest 使用,1.1 Googletest 背景,,Googletest是Googletest针对C++测试的开源项目,跨平台(Linux, Mac OS X, Windows, Cygwin, Windows CE, and Symbian)。 基于xUnit框架,有丰富的断言,自定义断言,事件机制,

2、death 测试,参数化测试,XML测试报告等。 应用案例: Chromium projects (谷歌浏览器) LLVM (Low Level Virtual Machine) ProtocalBuffers (类似XML数据描述语言),1.2 xUnit简介,,每个测试依次执行的4个不同阶段: 1、建立测试夹具(Fixture) ; 2、与SUT(System Under Test)交互; 3、验证结果; 4、拆卸测试Fixture,返回初始状态。,1.3 Googletest 特性,,,断 言 事件机制 参数化测试 运行参数 death测试,断言宏分类: (1) ASS

3、ERT_*系列:检查点失败时,推出当前函数 (2) EXPECT_*系列:检查点失败时,继续往下执行,1.3.1 断 言,,,布尔值检查,数值型检查,,,字符串检查,浮点型检查,,,当断言检查出错时输出的信息并不能很好的帮助你还原当时出错的状况时, 可以使用“<<” 操作符输出指定内容帮助分析出错原因。,1.3.2 事件机制,,,Gtest事件机制分类: 全局:发生在所有案例执行前后 TestSuite:案例中所有案例执行前后 TestCase: 单个案例前后,全局事件,,,要实现全局事件,必须写一个类,继承testing::Environment类,实现里面的SetUp和TearDown

4、方法。 1. SetUp()方法在所有案例执行前执行 2. TearDown()方法在所有案例执行后执行,TestSuite事件,,,需要实现一个类,继承testing::Test,然后实现两个静态方法 1. SetUpTestCase() 方法在第一个TestCase之前执行 2. TearDownTestCase() 方法在最后一个TestCase之后执行,TestCase事件,,,TestCase事件发生在每个TestCase执行前后 1. SetUp()方法在每个TestCase执行前执行 2. TearDown()方法在每个TestCase执行后执行,当被测函数需要传入不同的值时,可

5、以考虑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.5 death测试,,,在测试过

6、程中,对于可能导致程序崩溃的输入,我们可以检查程序是否按预期的方式崩溃,验证崩溃结果。 注意事项: 1. 不要在死亡测试里释放内存。 2. 在父进程里再次释放内存。 3. 不要在程序中使用内存堆检查。 环境要求:Linux, Windows (requires MSVC 8.0 or above), Cygwin, and Mac (the latter three are supported since v1.3.0).,,,VS2008下简单实现示例,EXPECT_DEATH(statement, regex); 1. statement是被测试的代码语句 2. re

7、gex是一个正则表达式,用来匹 配异常时在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.4 Googletest 环境搭建,,搭建步骤

8、: (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 via SetUp(). 4.Runs the test on the fixture object. 5.Cleans up the fixture via TearDown(). 6.Dele

9、tes 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)在待测试的类头文件中添加测试单元声明,此声明实质为待测试类添加友类,下图为gtest源码:,,,(4)实现测试案例实体和所需的事件机制,,,宏(TEST/TEST_F)源码分析:,,,(5)验证和查看单元测试结果,单元测试(Unit Testing),,Unit Te

10、sting 单元测试实例分析,2.1 Unit Testing,,单元测试:简单的讲独立的测试每一个函数 良好单元测试的品质: ( 1 ) 运行速度快(<0.1s); ( 2 ) 定位问题所在 以下测试不是单元测试: ( 1 ) 与数据库有交互 ; ( 2 ) 进行了网络通信; ( 3 ) 调用了文件系统; ( 4 ) 需要对环境做特定的准备和配置; 关键:解依赖 原则:源代码在产品阶段和测试阶段应该是完全一样的,2.2 单元测试场景实例分析,,在实际编写单元测试中,在单元测试之前的一些对函数所用的初始化操作通常并不能满足需要,常规的方法并不能解决一些复杂

11、的问题。 例如函数中涉及到对设备sdk调用、socket通信、工程中依赖的一些第三方库函数的引用等等。单元测试中并不需要对这些纳入到测试中,我们只需要模拟这些调用产生的结果返回到需要测试的函数即可。 针对以上问题常用处理方法: 伪对象 接缝模型,2.2.1 伪对象,伪代码: class Sale void scan() ........... 调用设备SDK方法showLine(); ........... ,伪对象:指测试中用来替代单元测试环境中无法调用的对象。 图例: 在一个POS系统中Sale类,其中方法Scan()显示商品信息。,伪代码: class S

12、ale Display display; public Sale(Diaplay display) this.display=display; void scan() display.showLine(); ,,,,2.2.2 接缝模型,接缝(seam):在程序的一些特殊的点,可以不用修改源码就可以达到改动代码的行为。 每个接缝点都有一个激活点,在这些点我们可以改变代码的行为。 接缝类型: 对象接缝 链接接缝 预处理期接缝(不适用,这里不做介绍),对象接缝,,用子类去覆盖掉基类中的。 图例: 在一个POS系统中Sale类,其中方法Scan()显示商品信息。,伪代码: cl

13、ass Sale void scan() ........... 调用设备SDK方法showLine(); ........... ,伪代码: class Sale void scan() ........... showLine(); ........... virtual showLine() 调用设备SDK方法showLine(); ,,链接接缝,,C++及很多语言在代码编译后,我们是可以在其链接期时改变其行为的。,,,,,,,,,预编译,编 译,汇 编,源程序,,链 接,展开宏 处理条件编译指令 处理预编译指令 删除注释、加标识 . . . .

14、.,词法分析 语法分析 语义分析 优化汇编代码 . . . . .,汇编码译为机器码 (目标文件.obj) . . . . .,地址和空间分配 符号决议 重定位 . . . . .,可执行应用程序,,链接图示,流程图示,本地实现调用第三方库功能, 在加载阶段去掉第三方库文件,添 加本地的.obj目标文件。,参考资料,,1. Gtest官方文档 2. CoderZh技术博客玩转Google开源C++单元测试框架GoogleTest系列 3. xUnit.Test.Patterns.Refactoring.Test.Code 4. 修改代码的艺术 5. 程序员的自我修养-链接、装载与库,感谢您的关注,

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

相关资源

更多
正为您匹配相似的精品文档
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!