准备实践自动化测试的朋友可以看看这本书:XUnit Test Patterns——Refactoring Test Code,及其网站http://xunitpatterns.com/。估计国内还没有译本。书的内容不错,只是倾向于单元测试,还糅合了其它诸如“反测试模式”(文中称为bad smells,大概如同code complete里面描述的bad smells差不多,只是这里从自动化测试代码的角度而言)的内容。我对测试模式比较感兴趣,就采摘一些与大家共享。

自动化测试所吸引“技术流”程序员的一个地方,就是试图在产品可执行代码运行的时候插入测试代码,一方面程序员需要了解产品代码的实现,可以体现其技术价值,另一方面可以过过“黑客”的瘾,让自己的代码侵入产品的运行中。

当然这只是附带的小甜头而已,真正的目的还是为了更有效地找到产品的缺陷。模仿者模式(原文为Test Double)是各种为了自动化测试顺利进行而让测试代码与产品代码共同执行的测试模式:

l  哑对象

相互协作的多个组件,如果其中一个尚未完成但又不太依赖其中的功能,大可以创建一个除了接口一模一样以外不做任何事的组件,仅仅是为了让这些组件能够放在一起测试。这种组件被称为“哑对象”,例如:

一系列组件需要其中一个组件确定某个数据库是否存在来继续后边的逻辑,为了让测试尽早进行,可以创建一个组件,单单返回数据库已经存在的信息。

l  伪对象

伪对象比哑对象要复杂一些。为了完成测试而创建的组件需要表现一定的行为,但是又不能实现如同产品一样的功能,所以需要用相对简单很多的实现来做到这一点。伪对象可以被看作是以作弊的方式实现需要的行为。例如为了计算出某个数值需要复杂运算,但是如果下游使用这个数值的组件只对其做简单判断,那么伪对象只需要返回预先指定的数值就可以测试下游组件的逻辑了。

l  测试桩

产品代码执行过程中需要某些条件的配合才能执行到某些分支,例如网络连接丢失的时候错误处理的逻辑。为了实现这些条件可能需要比较大的代价,但是如果能替换某个组件,使得正常情况下这个组件的功能与产品功能一样,需要测试的时候实现指定的条件,那么这个被称为测试桩的组件就可以让产品轻易执行到那些分支了。例如:

进行网络通信的组件可以替换为测试桩,这个测试桩在自动化测试程序需要的时候返回网络连接丢失的信息,这样从外部就可以检验错误处理的正确性了。

l  嗅探桩

很多产品的功能是通过用户界面来表达的,但为了调试缺陷或者更早发现产品内部通信上的缺陷,可以引入测试桩组件。它的作用不是实现指定的条件,而是把产品内部通信的数据留存一份,留待调试或者后期分析使用。例如:

ASP.Net应用程序存在浏览器与web服务器之间的通信,嗅探桩能够记录两者之前的所有http通信,取得这些信息有助于调试缺陷和自动分析用户界面上看不到的缺陷。

l  仿制对象

仿制对象比伪对象更复杂,相对于产品功能来说仿制对象的功能可能只是性能或者伸缩性上的差别。例如,如果安装服务器端的代价太大,为了测试客户端,服务器的仿制对象可能是实现全部与客户端的通信协议,与真实服务器端的区别可能是无须服务多个客户端,客户端需要的数据无须依赖其它组件而已。所以使用这个模式的前提是性价比足够高以及通信协议变动有限。

测试模式点滴:模仿者模式相关推荐

  1. locust压测工具:测试信息输出与分布式模式

    locust压测环境描述 本文环境python3.5.2 locust版本0.9.0 locust测试信息输出与分布式模式 本文将主要分析两个方面的内容: 1.locust在启动运行在跑测试用例的时候 ...

  2. 重构是提高可测试性的主要手段 《设计模式》《代码重构》《从重构到模式》 《反模式》 重构时机 编写测试时候 修改BUG时候

    l重构是提高可测试性的主要手段 <设计模式><代码重构><从重构到模式> <反模式> 重构时机 编写测试时候 修改BUG时候

  3. k8s 1.15.1 service 的 ClusterIP模式的sessionAffinity: ClientIP 模式负载测试实验

    实验目录 测试总纲: 实验目的: 准备环境: 实验一: 实验过程: 实验结论: 实验二: 实验过程: 实验结论: 实验三: 实验过程: 实验结论: 测试总纲: k8s中的service常用的Clust ...

  4. rog手机计算机测试,荣耀V8体验测试:降低分辨率的ROG模式真能省电?

    [PConline 评测]随着智能手机屏幕越做越大,以及使用场景越来越丰富,我们对续航的诉求也越来越强烈.此外,厂商为了提高手机的续航也是想尽了办法,譬如配备更大容量的电池,选用低功耗元器件以及系统的 ...

  5. 12-20210225华为海思Hi3518EV300在鸿蒙系统下测试WIFI(AP+STATION模式)

    12-20210225华为海思Hi3518EV300在鸿蒙系统下测试WIFI(AP+STATION模式) 2021/2/25 10:45 [HarmonyOS HiSpark_IPC_DIY开发套件] ...

  6. 【Android 电量优化】电量优化特性 ( Doze 低电耗模式 | Standby 应用待机模式 | 白名单设置 | 白名单添加系统设置界面 | 指定应用的白名单添加界面 | 测试应用 )

    文章目录 一.Doze 低耗电模式简介 二.Standby 应用待机模式简介 三.Doze 和 Standby 模式测试 四.白名单添加 ( 方式一 ) 五.白名单添加 ( 方式二 ) Android ...

  7. getresourceasstream方法_【设计模式】第三篇:一篇搞定工厂模式【简单工厂、工厂方法模式、抽象工厂模式】...

    文章系列目录(持续更新中): [设计模式]第一篇:概述.耦合.UML.七大原则,详细分析总结(基于Java) [设计模式]第二篇:单例模式的几种实现And反射对其的破坏 一 为什么要用工厂模式 之前讲 ...

  8. java设计模式中不属于创建型模式_23种设计模式第二篇:java工厂模式定义:工厂模式是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式...

    23种设计模式第二篇:java工厂模式 定义: 工厂模式是 Java 中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 工厂模式主要是为创建对象提供过渡接口, ...

  9. 源码测评:来客推开发源码能用来做什么模式的商城?B2B2C?S2B2C?云集模式?淘宝模式?

    开源社区 提到开源代码,在程序员眼中一定有排名的是就是github. GitHub 是一个面向开源及私有软件项目的托管平台,因为只支持 Git 作为唯一的版本库格式进行托管,故名 GitHub. Gi ...

最新文章

  1. 4j导入节点与关系_Neo4j Cypher 中怎样根据值动态指定关系类型?
  2. 比特币现金压力测试超越了24小时创造新纪录
  3. 干货整理及PPT下载福利 2017(上海)人工智能产品经理大会
  4. 汇编语言王爽第二版-课后答案以及解析
  5. POJ3686 The Windy's 【费用流】*
  6. 2020年日历电子版(打印版)_2020年第11期印花世界电子版/手机版,欢迎在线免费阅读!...
  7. apache 限制IP网段访问
  8. 双编码器的自然语言图像搜索
  9. matlab图像处理函数大全
  10. java10.0.1怎么安装_关于tomcat:您使用哪个Java? 在Server 2016上安装JDK和JRE(10.0.1); 设置JAVA_HOME和路径...
  11. PHP和Mysql处理IP地址
  12. Mybatis-Plus查询中排除标识字段
  13. 漫步最优化四十二——Partan法
  14. Java中的优先队列——二叉堆
  15. 翻译: 2.5. 自动微分 深入神经网络 pytorch
  16. Java根类--Object类
  17. egg(72,73)--egg之商品curd的编辑
  18. WPS Office Pro 2016 专业版
  19. 完整登录、注册页面(无功能)
  20. 【计算机网络】网络层:路由器的构成

热门文章

  1. H.264和H.265
  2. 光纤跳线和光纤尾纤的异同点
  3. python hackrf_GnuRadio在HackRF打开的情况下无法运行OS X 10.9.4
  4. 20150218【改进Poll定时查询】IMX257实现GPIO-IRQ中断按键获取键值驱动程序
  5. 链脉电子名片,轻松帮助企业建立信息数据库
  6. sklearn学习之:(7)sklearn 自动生成数据集用法:make_hastie_10_2, make_circles, make_moons
  7. 春招实习_远景智能 4.22 电话面
  8. PHP超简易页面数据写入excel
  9. executemany存万得数据到数据库
  10. 理解 OpenStack + Ceph (4):Ceph 的基础数据结构 [Pool, Image, Snapshot, Clone]