- 1、本文档共55页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单元测试讲义
单元测试 快速的编程反馈 软件开发的困难 软件总是要修改的 添加新特性 Fix bug 优化 重构 软件开发的困难 修改软件是危险的举动 我们如何得知已经正确的完成了修改? 我们如何得知没有破坏任何(既有的)东西? 软件开发的困难 当前我们如何测试修改 编译 启动服务器 启动一个以上的客户端 鼠标操作 看看效果 重复这些步骤 软件开发的困难 这种测试的缺点 不能立即获得反馈 时间漫长 运行次数不足 甚至不测试 软件开发的困难 这种测试的外号 编辑并祈祷 单元测试 概念 由一组独立的测试构成,其中每个测试针对软件中的一个单独的原子行为单元 并非检查一簇类是否能够合作良好,而是检查单个的对象行为是否正确 单元测试 传说中的例子,被测试的对象非常独立 单元测试 传说中的过程 实例化被测试对象 提供测试数据 调用被测试的方法 验证测试结果 单元测试 实际情况1 内存访问异常,ItemMngS无法在测试中实例化 单元测试 实际情况2 内存访问异常,无法调用被测试的方法 单元测试 实际情况3 函数没有返回值,不知道如何验证结果 单元测试 实际的情况 理想是美好的,世界是残酷的 软件由对象的相互协作来实现功能,对象之间充斥着必不可少的依赖 软件的运行依赖于数据库,网络和文件系统 多数函数的并没有返回值来验证行为 单元测试 比如 CServerCha依赖各种CXXMng CXXMng之间相互依赖 Auto_PlayerData是数据库的接口 单元测试 依赖的坏处 无法将某个类从软件中隔离出来 无法轻易的安置单元测试 单元测试 不经意的转变成集成测试 我们可以将被依赖的类在测试中实例化 被依赖的类肯定也在依赖别的类 一环扣一环,于是我们把整个软件的大部分类都牵扯到一次测试中 这个单元测试变得笨重 这已经不是单元测试了!!! 解依赖 有依赖,就要解依赖 在被测试的代码中,依赖是少量的 解依赖就是将无法放入测试中的小段代码从整块代码中分离出来的行为 解依赖就是构造接缝的过程 解依赖 什么是接缝? 接缝是指程序中的一些特殊的点,在这些点上你无需作任何修改就可以达到改动程序的目的 如果能够将接缝处的行为取代掉,我们就等于有选择的排除了某些依赖 我们还可以将被依赖方替换为其他代码,以此感知测试代码对被依赖方的要求和影响 解依赖 其实接缝就是间接层 接缝的基本类型 虚函数 指针:函数指针,全局变量,参数 解依赖 虚函数 虚函数是接缝的根本 在不改变软件的前提下,虚函数的行为可以在测试中的被派生类所改变 解依赖 code 解依赖 伪对象 由于虚函数的存在,在测试中的派生类可以改变原来的行为 在测试中用于伪装成被测试类的合作者的对象,称为伪对象 伪对象是后面介绍的解依赖技术的根本 解依赖 全局变量 实例化的全局对象是恶劣的,如:CPlayerMng g_playerMng; 隐性初始化的单件是恶劣的,如:CCommonTimerMng::Instance(); 对象指针是一个接缝,可以在测试中替换指针实际指向的对象 改变对象的行为需要虚函数 解依赖 code 解依赖 函数指针 全局函数是不可替换的,如:G_GetPlayerUnit 但是函数指针可以在测试中替换为其他签名相同的函数 解依赖 code 解依赖 参数指针 参数对象指针和全局对象指针一样,可以在测试中替换实际指向的对象 行为的改变依赖于虚函数 解依赖 code 解依赖 完全没有找到接缝,怎么办? 没有接缝就创造接缝 解依赖 创建接缝的方法 提取并重写调用 设置并替换 提取并重写获取方法 提取并重写工厂方法 解依赖 提取并重写调用 被测试的代码中,委托了其他的对象做某件事情 给被测试对象新添加一个虚函数,封装这个委托 在测试中用派生类覆盖这个虚函数 解依赖 code 解依赖 设置并替换 对被依赖的对象或者单件提供一个设置方法 在测试中,用设置方法改变他们 解依赖 code 解依赖 提取并重写获取方法 在被测试的代码中,委托了其他对象做某件事情 给被测试类添加一个获取委托对象的虚函数 在测试中用派生类覆盖这个虚函数 解依赖 code 解依赖 提取并重写工厂方法 构造函数包含太多依赖,以至于无法实例化被测试的类 将依赖的代码提取到一个虚函数中 在测试中覆盖该虚函数 解依赖 code 解依赖 创建接缝的更高级的方法 参数包装器 方法对象 解依赖 参数包装器 有些类是无法修改的,final的 有些类几乎无法实例化,解依赖也很费劲 对这样的类,总是可以用wrapper将它包起来 将实际代码中对该类的依赖换为对wrapper的依赖 Wrapper有一套抽象的接口 解依赖 code 解依赖 方法对象 有一些类十分巨大 被测试的方法又臭又长 创建一个新类,该类只有一个方法 将被测试的
您可能关注的文档
- 前言中药鉴定学是执业药师必备的中药专业知识-仪器信息网.PDF
- 前途是光明的.PPT
- 制动防抱死装置教学内容:一、制动防抱死装置的优点二、制动防抱.PPT
- 副程式与函式.PPT
- 前言-鸿业.PDF
- 前言-锐拓普电力.PDF
- 力祥资讯有限公司.PDF
- 办公设备及其他办案设备采购-桂林市财政局.DOC
- 功率因数自动补偿控制器品种及选型方法1、概述功率因数自动补偿.DOC
- 刻意安排是启发潜能教育的核心要求-南京市小行小学.PPT
- 分析let s单元56ago2卷纸zheng unit56.pdf
- 塑胶材料其它分类原料pa9t 12.pdf
- md16x16数字媒体切换器设备.pdf
- 者参考项目发起人学科类型单位序列承包商修订页代码顺序典型.pdf
- 届世界天然气大会阿姆斯特丹2006add10288.pdf
- 期测试记录表每周weekly g1g6 journeys tests level 6 lesson26.pdf
- modernize-whitepaper现代化您应用程序白皮书.pdf
- anybackup产品典型案例分析.pdf
- 约克金融工程课程tfeslide32.pdf
- 广州市妇女儿童医疗中心历份教学药历01tjy.pdf
最近下载
- 2024年湖北省中考历史试题卷(含答案及解析).docx
- 爱护我们的五官幼儿主题班会PPT课件.pptx VIP
- 2020人教版二年级数学下册易错题型及答案.pdf VIP
- 2024届高考专题复习:小说叙述视角课件(共24张PPT) (1).pptx VIP
- 2024届高考专题复习:小说叙述视角.pptx VIP
- 《道德与法治》六年级下册全册知识点汇总.docx
- 测测达人版平台服务规则考试题库答案APP测测基础认证题.docx
- 江苏省苏州常熟市七年级数学下学期期末考试试题.docx VIP
- 建筑地基处理技术规范.pptx
- T_CACM 1270-2019 中医内科临床诊疗指南 脓毒症.docx
文档评论(0)