Test Double介绍(来自xUnit Test Patterns)

Easter79
• 阅读 584

啄木鸟软件测试培训网:www.3testing.com

啄木鸟之家 大吕

敏捷开发最基础的工程实践是“持续集成”和“单元测试“。xUnit Test Patterns一书主要就是介绍作者在实践“单元测试”过程中碰到的许多问题及其解决之道。 
本书赢得过2008年Jolt Productivity Award。据说中文翻译很烂,有英文能力同学建议直接看原版。
其中关于Test Double的介绍非常精彩,转载介绍一下。

今天在 https://martinfowler.com/bliki/TestDouble.html中看到Test Double概念,简单了解了一下,看到xUnit Test Patterns这本书,快速看了一下,还挺好,推荐给大家。同时也把Test Double概念写出来分享一下。

Test Double有人翻译为”测试替身“,在单元测试时,使用Test Double有下列好处:

1、减少对被测对象的依赖,使得测试更加单一

2、让测试案例执行的时间更短,运行更加稳定

3、对SUT(待测系统)内部的输入输出进行验证,让测试更加彻底深入

备注:若待测系统使用的语言环境比较容易使用依赖注入,那么就较容易实现Test Double,否则比较费劲。

Test Double是测试中替换待测系统的某个部分从而实施测试的通用术语,包含下列几种类型:

备注:实际测试操作中,并不会那么严格区分这些类型,但我们可以通过学习这些分类来深入了解各类mock系统和策略背后的内容。

1、Dummy Object

指在测试中须传入的对象,但实际又不使用。通过仅仅是为了能调用被测对象而必须传入的参数,比如用于填充参数列表。

书中事例代码如下。

Test Double介绍(来自xUnit Test Patterns)

2、Test Stub

测试桩是单元测试最常用的术语之一。用于接受特定的输入参数调用,然后返回特定的值;不在约定范围的调用没有响应或都是采用默认响应。Test Stub实际就是在SUT内部打的一个桩,按照之前约定返回特定的内容给调用者。

Test Stub最主要特点是:交互完全在待测系统内部,它不会返回内容给测试用例,此外也不会对SUT内部的输入进行验证。

Test Double介绍(来自xUnit Test Patterns)

书中示意代码如下:

Test Double介绍(来自xUnit Test Patterns)

3、Test Spy

就跟Test Spy名字中间谍一样,它是安插在待测系统内部,专门负责将待测系统内部的间接输出传到外部。

它的主要特点是将内部的间接输出返回给测试用例,由测试用例进行验证。

注意:Test Spy只负责获取内部信息,并把这些信息发出去,不负责验证信息的正确性。

Test Double介绍(来自xUnit Test Patterns)

事例代码如下:

Test Double介绍(来自xUnit Test Patterns)

4、Mock Object

Mock Object是最常见的形式,存在xMock框架等。

它类似于Test Spy,安插在待测系统内部,获取到待测系统内部的间接输出,一般根据调用者输入,按照约定执行操作,然后返回调用者事先编码写好的预期结果。

Mock Object主要的特点是它还会对调用进行验证,若碰到不在预期范围的调用还会抛出异常。

Test Double介绍(来自xUnit Test Patterns)

5、Fake Object

它拥有几乎和实际对象一样的功能,一般为了规避生产环境复杂性或真实系统还没有研发出来而引入替代系统或模块,最常见情况如通过内存数据库来代替实际生产数据库等。

顾翔凡言:

在正确的道路上作自己擅于做得事,大方向把握好,不要过于纠结,就可以了。

啄木鸟软件测试培训中心,2017****年主打课:

各企业可进行裁剪

自动化软件测试课程(企业内训 ¥24,000,公开课 ¥2,000/人)

软件性能测试课程(企业内训 ¥18,000,公开课 ¥1,500/人)

WEB软件用户体验式测试课程(企业内训 ¥12,000,公开课 ¥1,000/人)

安卓APP自动化软件测试课程(企业内训 ¥24,000,公开课 ¥2,000/人)

问题引导的用户验收测试(UAT)课程(企业内训 ¥12,000,公开课 ¥1,000/人)

嵌入式软件测试培训课程(企业内训 ¥18,000,公开课 ¥1,500/人)

探索式软件测试课程(企业内训 ¥12,000,公开课 ¥1,000/人)

APP软件专项测试课程(企业内训 ¥12,000,公开课 ¥1,000/人)

WEB软件安全性测试课程(企业内训 ¥15,000,公开课 ¥1,200/人)

WEB软件测试课程(企业内训 ¥12,000,公开课 ¥1,000/人)

以项目为导向的敏捷课程方案(

两天课企业内训:¥12,000 公开课:¥1,000/人

三天课企业内训:¥18,000公开课:¥1,500/人

一周课企业内训:¥29,000公开课:¥5,000/人

四周可企业内训:¥100,000公开课:¥1,0000/人

详细请参看:http://www.3testing.com/files/class.html或者本微信公众号

Test Double介绍(来自xUnit Test Patterns)

Test Double介绍(来自xUnit Test Patterns)

本文分享自微信公众号 - 软件测试培训(iTestTrain)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
Java获得今日零时零分零秒的时间(Date型)
publicDatezeroTime()throwsParseException{    DatetimenewDate();    SimpleDateFormatsimpnewSimpleDateFormat("yyyyMMdd00:00:00");    SimpleDateFormatsimp2newS
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
2个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
Easter79
Easter79
Lv1
今生可爱与温柔,每一样都不能少。
文章
2.8k
粉丝
5
获赞
1.2k