单测mock和stub

2023-10-27

A variety of different terms are used to refer to these “custom objects”. In an effort to clarify the vocabulary,
Gerard Meszaros provides the following definitions:
● Test Double is a generic term for any test object that replaces a production object.
● Dummy objects are passed around but not actually used. They are usually fillers for parameter lists.
● Fakes have working implementations, but take some shortcut (e.g., InMemoryDatabase).
● Stubs provide canned answers to calls made during a test.
● Mocks have expectations which form a specification of the calls they do and do not receive.

(1) Dummy
对象被四处传递,但是从不被真正使用。通常他们只是用来填充参数列表。
 
(2) Fake
有实际可工作的实现,但是通常有一些缺点导致不适合用于产品(基于内存的数据库就是一个好例子)。
 
(3) Stubs
 
在测试过程中产生的调用提供预备好的应答,通常不应答计划之外的任何事。stubs可能记录关于调用的信息,比如 邮件网关的stub 会记录它发送的消息,或者可能仅仅是发送了多少信息。
 
(4) Mocks
 
如我们在这里说的那样:预先计划好的对象,带有各种期待,他们组成了一个关于他们期待接受的调用的详细说明。

 

stub是state-based,关注的是输入和输出。mock是interaction-based,关注的是交互过程。

 

stub也是可以通过增加代码来实现一些expectiation的特性,stub理论上也是可以向mock的方向做转化,而从使得两者的界限更加的模糊。

 

mock和stub的最重要的区别:expectiation/期望。

对于mock来说,exception是重中之重:我们期待方法有没有被调用,期待适当的参数,期待调用的次数,甚至期待多个mock之间的调用顺序。所有的一切期待都是事先准备好,在测试过程中和测试结束后验证是否和预期的一致。
而对于stub,通常都不会关注exception,就像上面给出的UserDaoStub的例子,没有任何代码来帮助判断这个stub类是否被调用。虽然理论上某些stub实现也可以通过自己编码的方式增加对expectiation的内容,比如增加一个计数器,每次调用+1之类,但是实际上极少这样做。

 

EasyMock使用了 record/replay的隐喻( metaphor)来设置expectations。对于每个你想要mock的对象,你建立一个control和mock对象。mock满足次要对象的接口,control可以提供额外的特性。为了说明一个 expectation,你调用了方法(带有期望的参数)。如果你需要一个返回值的话,接下来就调用control。一旦你结束了对 expectations的设置,你对control调用replay,那就是mock结束了记录而且准备好对主要对象做反应的时候。结束以后你对control调用verify。 

   人们最初一般会对record/replay隐喻有疑虑,但是很快会适应。它相比jMock的限制来说有优势,因为你可以实际调用方法,而不是利用string来制定方法的名字。这意味着你可以利用IDE提供的code-completion,而且任何对方法名的重构都会自动将test更新。缺点就是你不能拥有更松散的约束。

引入前驱者系列博文:http://www.blogjava.net/aoxj/category/29496.html

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单测mock和stub 的相关文章

  • Spring Boot之自定义JSON转换器

    JSON是前后端数据交互最流行的格式 在目前的项目开发中 常见的JSON的转换器有三种 json lib由于自身的缺陷基本不用 最广泛的还是Jackson Jackson 在springboot中默认添加了jackson databind作
  • Ubuntu18.04环境下Gtest框架安装测试

    准备 在安装Gtest框架之前在linux上安装好cmke g 工具 sudo apt get install cmake sudo apt get install g 方法一 下载Gtest压缩包解压安装 最新版本的Gtest下载链接 h
  • 【软件测试】linux命令-引用符号(反斜杠\、单引号‘‘、双引号““)

    引用符号在解析器中保护特殊元字符和参数扩展 其使用方法有3种 反斜杠 单引号 双引号 单引号和双引号必须匹配使用 均可在解析器中保护特殊元字符和通配符 但是单引号 硬转义 主要用于信息的原样输出 防止任何变量的扩展 双引号 软转义 允许变量
  • 静态分析分析

    软件静态分析概念 静态分析通常是指不执行程序代码而寻找代码中可能存在的错误或评估程序代码的过程 被测对象是各种不软件相关的有必要测试的产物 如文档 源代码等 通过扫描程序正文对程序的数据流和控制流等进行分析 找出系统的缺陷 得出测试报告 不
  • 使用缺省的拷贝构造函数带来的危险性

    我此前另外一篇文章通过类String看拷贝构造函数 赋值函数的作用和区别 对于更深的拷贝构造函数讨论大家可以参见这篇帖子 C 类对象的复制 拷贝构造函数 通过编写类String的拷贝构造函数和赋值函数介绍了一些拷贝构造数 本文着重介绍拷贝构
  • 常用电子元器件简介

    一 电阻器 电阻器 一般情况下也称电阻 是一种阻碍电流在电路中流动的线性元件 也是组成电子电路的主要元件之一 1 电阻器的作用及电路图形符号 1 电阻器的作用 电阻器主要用于控制电路中的电压和电流 除了具有降压 分压 限流和分流作用外 还具
  • 【测试】三张图解读 CI/CD

    文章目录 前言 CI CD 的概述 CI持续集成 Continuous Integration 持续集成小结 CD 持续交付 Continuous Delivery 持续交付小结 CD 持续部署 Continuous Deployment
  • cpu的出错概率?

    我今天想到了一个很不懂的问题 cpu执行指令会出错吗 出错的概率是多少 为什么服务器能够不间断的工作很长时间呢 难道cpu指令级的东西不会出错 操作系统怎么避免这些错误呢 2012 5 27 找到一篇文章 http wuyudong blo
  • 接口测试总结

    第一部分 主要从问题出发 引入接口测试的相关内容并与前端测试进行简单对比 总结两者之前的区别与联系 但该部分只交代了怎么做和如何做 并没有解释为什么要做 第二部分 主要介绍为什么要做接口测试 并简单总结接口持续集成和接口质量评估相关内容 第
  • hdu2030 汉字统计

    hdu2030 汉字统计 Time Limit 2000 1000 MS Java Others Memory Limit 65536 32768 K Java Others Total Submission s 4080 Accepted
  • 并发测试工具 apache-jmeter使用发送post请求JSON数据

    目录 1 下载安装 2 汉化 3 创建高并发测试 配置线程组 创建web请求 创建监听器 结果树 汇总报告 为web请求添加token 添加Content Type用于发送json 4 启动测试 5 查看结果 1 下载安装 官网Apache
  • ASP.NET Core 中间件详解及项目实战

    前言 在上篇文章主要介绍了DotNetCore项目状况 本篇文章是我们在开发自己的项目中实际使用的 比较贴合实际应用 算是对中间件的一个深入使用了 不是简单的Hello World 如果你觉得本篇文章对你有用的话 不妨点个 推荐 目录 中间
  • 软件测试 接口测试 入门Jmeter 接口关联 提取器 断言 与fiddler配合使用 使Jmeter录制和创建脚本 操作数据库 持续集成测试

    文章目录 1 接口测试概述 1 1 什么是接口测试 1 2 接口分类 1 3 接口的设计风格分类 1 3 1 Soap架构 1 3 2 Rpc架构 1 3 3 RestFul架构 1 3 4 接口测试工具介绍 1 4 接口测试流程 2 Jm
  • ASP.NET Core快速入门(第6章:ASP.NET Core MVC)--学习笔记

    课程链接 http video jessetalk cn course explore 良心课程 大家一起来学习哈 任务40 介绍 任务41 Individual authentication 模板 dotnet new mvc help
  • Fortify 代码扫描安装使用教程

    前言 Fortify 能够提供静态和动态应用程序安全测试技术 以及运行时应用程序监控和保护功能 为实现高效安全监测 Fortify具有源代码安全分析 可精准定位漏洞产生的路径 以及具有1分钟1万行的扫描速度 Fortify SCA 支持丰富
  • 使用Minitab解决Excel的限制问题

    前两天 当我在做数据转置以期获得更好分析图形的时候 我碰到了传说中excel的限制 如图 在解决这个问题的过程中 我发现了用来做数据分析 比excel更好的工具Minitab 打开minitab 把纪录数据的Excel表以File gt O
  • AngularJs单元测试

    这篇文章主要介绍了angularJS中的单元测试实例 本文主要介绍利用Karma和Jasmine来进行ng模块的单元测试 并用Istanbul 来生成代码覆盖率测试报告 需要的朋友们可以参考下 以下可全都是干货哦 当ng项目越来越大的时候
  • 软件测试题目

    一 判断题 每题2分 20 1 软件测试就是为了验证软件功能实现的是否正确 是否完成既定目标的活动 所以软件测试在软件工程的后期才开始具体的工作 初级 2 发现错误多的模块 残留在模块中的错误也多 初级 3 测试人员在测试过程中发现一处问题
  • 使用SpringSecurity

    前几天写了一个SpringBoot对拦截器的使用 在实际项目中 对一些情况需要做一些安全验证 比如在没有登录的情况下访问特定的页面应该解释的拦截处理 这一篇介绍使用SpringSecurity来做简单的安全控制 由于SpringSecuri
  • ASTM D6147测定压缩情况下硫化橡胶和热塑弹性体作用力衰减 (应力松弛) 的标准试验方法

    标准名称 ASTM D6147 Standard Test Method for Vulcanized Rubber and Thermoplastic Elastomer Determination of Force Decay Stre

随机推荐

  • 孢子气囊 tkinter控制台

    模块 tkinter time randon serial 可以用串口连接 import serial import tkinter import tkinter ttk import time import random ser seri
  • 百度地图API 手动添加文字标记

  • QT 布局管理器(QHBoxLayout/QVBoxLayout/QGridLayout)

    1 setcontentmargins设置四周留白 相对于整个窗口的 的间隔 函数原型 void QLayout setContentsMargins int left int top int right int bottom layout
  • ERP经典范式知多少—重温Go/Nogo范式的经典实验

    本文同步发布于 脑之说 微信公众号 欢迎搜索关注 ERP Event related Potentials 作为神经电生理研究中的重要方法已经被广泛的应用在脑科学研究中 在ERP研究中 实验范式是重中之重 可靠的实验范式能够帮助研究者更好的
  • db2按时间戳或日期条件查询

    我一同事写的 记录一下 substr char timestamp 1 10 date timestamp是表中timestamp字段 date 是条件值 select from table where substr char timest
  • stm32笔记:GPIO的的配置和操作(1)推挽输出方式

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 封装端口输出高低电平控制LED显示 以下方式便于修改 LED h ifndef LED H define LED H include stm32f10x h define
  • Python二级必考函数.format()函数

    目录 一 format 函数介绍 二 函数运用 位置填充 填充物 fill 对齐 align 宽度 width sign参数保留正负号 指定精度 nf 分隔符 进制 o b d x 一 format 函数介绍 format 函数用来收集其后
  • Python 第三方模块 统计2 patsy,chowtest

    一 patsy 官方文档 https pypi org project patsy 1 概述 1 简介 patsy是1个用于描述统计模型 尤其是线性模型或具有线性组件的模型 和构建设计矩阵的Python库 其受R S语言中的公式迷你语言启发
  • 数据库索引原理及优化

    转发内容 一 摘要 本文以MySQL数据库为研究对象 讨论与数据库索引相关的一些话题 特别需要说明的是 MySQL支持诸多存储引擎 而各种存储引擎对索引的支持也各不相同 因此MySQL数据库支持多种索引类型 如BTree索引 哈希索引 全文
  • Python实现红黑树的删除操作

    Python实现红黑树的删除操作 本专栏的上一篇文章使用Python实现了红黑树的插入操作 参考 https blog csdn net weixin 43790276 article details 106456969 本篇文章使用Pyt
  • STL模板简介

    STL是C 中的优秀作品 有了它的陪伴 许多底层的数据机构以及算法我们不需要自己写 可以直接用STL里面的 就相当于我们站在巨人的肩膀上 飞一般地向前进 一 什么是STL STL standard template library 标准模板
  • H5跳转微信小程序-成功案例(VUE)(踩坑无数)

    这里写自定义目录标题 准备工作 根据官方提供的资料需准备以下几点 1 已认证的服务号 2 绑定JS接口安全域名 在微信公众平台设置 3 IP白名单 在微信公众平台设置 4 将小程序和H5公众号进行关联 在微信公众平台设置 5 页面path和
  • paramiko 无法实例化 transport

    背景 Paramiko is a pure Python 1 2 7 3 4 implementation of the SSHv2 protocol 2 providing both client and server functiona
  • python信号处理算法库_语音信号处理之时域分析-音高追踪及其Python实现

    1 概述 在音高及其Python实现一文 中 我们使用了简单的 观察法 来计算音高 这并不太难 但这并不有好而且费时费力 那么我们就想 如何通过分析和计算 使用算法来自动计算音高呢 用算法让计算机自动抓取音高的过程 称为音高追踪 Pitch
  • Flex 布局教程:语法篇

    网页布局 layout 是 CSS 的一个重点应用 布局的传统解决方案 基于盒状模型 依赖 display 属性 position属性 float属性 它对于那些特殊布局非常不方便 比如 垂直居中就不容易实现 2009年 W3C 提出了一种
  • Glog 使用

    原文链接 glog使用
  • Java复习-26-枚举

    枚举 替换多例设计 目的 使用场景 不用也没啥 定义一个描述性别的类 那么该对象只有两个 男 女 或者描述颜色基色的类 可以使用 红色 绿色 蓝色 功能 用于定义有限个数对象的一种结构 多例设计进化版 方法 enum 关键字 提供有enum
  • 从码云上克隆代码到IDEA及项目启动

    码云版本库地址复制 输登录代码库系统 找到 版本库 点击 版本库地址 下拉列表 选中 http zjs 190 100 21 10 1001 r aqjg extern project git 版本库地址复制 如果不是首次clone项目可直
  • 头歌答案Python,001

    金宝 答案在这里 自己抄 1 第一关 计算机 num 1 int input 请输入第一个数 print num 1 num 2 int input 请输入第二个数 print num 2 alg input 请选择要执行的运算符 prin
  • 单测mock和stub

    A variety of different terms are used to refer to these custom objects In an effort to clarify the vocabulary Gerard Mes