Mock介绍

2023-11-18

  • mock的定义(what):

    mock是在测试过程中,对于一些不容易构造/获取的对象,创建一个mock对象来模拟对象的行为

  • 为什么要使用mock(why):
    在做单元测试过程中,经常会有以下的场景:

class A 依赖 class B

class B 依赖 class C和class D

class C 依赖 ...

class D 依赖 ...
1.被测对象依赖的对象构造复杂

我们想对class A进行单元测试,需要构造大量的class B、C、D等依赖对象,他们的构造过程复杂(体现在构造步骤多、耗时较长),这时我们可以利用mock去构造虚拟的class B、C、D对象用于class A的测试,因为我们只是想测试class A的行为是否符合预期,我们并不需要测试依赖对象。

2.被测单元依赖的模块尚未开发完成,而被测对象需要依赖模块的返回值进行测试:

----- 比如service层的代码中,包含对dao层的调用,但dao层代码尚未开发
----- 比如web的前端依赖后端接口获取数据进行联调测试,但后端接口并未开发完成
  • 哪些时机和场合需要使用mock(when&where)
1.单元测试/接口测试中测试对象依赖其他对象,这些对象的构造复杂、耗时或者根本无法构造(未交付)
2.我们只测试对象内部逻辑的质量,不关心依赖对象的逻辑正确性和稳定性
  • 是否应该在测试中使用mock,投入产出比如何(how much)

我们可以基于以下2个原则去做mock,这样的mock的投入产出比是最高的

1.不需要对所有的依赖对象/服务进行mock,只对那些构造步骤复杂、构造耗时较长、不稳定的依赖对象/服务进行mock。
2.如果做分层测试(比如分层自动化),高层的测试设计可以基于以下假设:低层的测试已保证低层对象的质量,高层对低层的依赖可以mock,无需关心所依赖的低层对象的质量。
  • Local Mock和Remote Mock
    Local Mock和Remote Mock的区别在于依赖对象的行为调用是本地/远程调用

1.Mock本地依赖对象
如果依赖对象的调用是本地调用,就属于Local Mock。EasyMock/Mockito都可以实现对本地依赖对象的Mock。

2.Remote Mock
如果被测对象依赖对象的是一些远程服务(HTTP/RPC服务),就属于Remote Mock,Remote Mock一般实现对指定的服务/接口客户端(消费者)进行Mock。可以通过Mock Server等方式去实现。

被测对象和依赖对象/服务的关系

 

Local&Remote Mock

  • LocalMock相当于使用Mock对象替换依赖对象。
  • RemoteMock相当于使用MockServer替换真实的HTTP/RPC Server。

Mock工具

1.EasyMock

EasyMock简介和代码示例

2.Mockito

Mockito简介和代码示例

3.PowerMock
PowerMock



作者:测试你个头
链接:https://www.jianshu.com/p/3944c0b82f30

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

Mock介绍 的相关文章

  • openssl:Can‘t load /home/test/.rnd into RNG

    Can 39 t load home test rnd into RNG 140409534742976 error 2406F079 random number generator RAND load file Cannot open f
  • test

    1 overrides the s4 notdlg class items as display none lt script type 61 34 text javascript 34 gt var fV4UI 61 true lt sc
  • test

    1 为什么要有类的继承性 类的继承性可以减少代码冗余度 xff0c 提高代码复用性 xff0c 提高代码操作效率 2 继承的格式 xff08 语法 xff09 子类 extends 父类 3 子类继承父类后有哪些不同 子类范围大于父类 xf
  • Java基础Test

    判断语句 1 打印 2 求两个浮点数之商 3 对一个数四舍五入取整 4 判断一个数是否为奇数 5 求一个数的绝对值 6 求两个数的最大值 7 求三个数的最大值 import java util Scanner public class Te
  • Permutation Test

    常规步骤 xff1a 一般 多组间样本均数的比较是先做正态性检验和方差齐性 xff0c 然后在各组 都满足 正态性和方差齐性的前提下做方差分析 如果数据呈现正态分布 xff0c 但方差不齐 xff0c 则可以选择近似方法 Welch法 和
  • Permutation test(排列(组合)检验)

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 对Permutation test 的首次描述可追溯到上个世纪30年代 Fisher 1935 和Pitman 1937 介绍了其在线性统计模型中的应用 但该法计算工作量过
  • name ‘train_test_split‘ is not defined解决方法

    name 39 train test split 39 is not defined解决方法 解决方式 xff0c 用model selection模块导入 xff1a span class token keyword from span
  • Psins代码解析之kalman松组合导航融合算法 test_SINS_GPS_153.m&test_SINS_GPS_186.m&test_SINS_GPS_193.m

    框架 xff1a 设置松组合导航算法中状态量 观测量数目 xff1b 比如 xff1a psinstypedef 153 xff0c 状态误差量为15维 xff0c 量测量为3维 xff1b 对仿真生成的飞行轨迹 test SINS trj
  • JS的test()方法

    解析 解释 xff1a js的test 方法用于检测一个字符串是否匹配某个格式 语法 xff1a RegExpObject test string 返回值 xff1a 如果String中含有RegExpObject中匹配的字符返回true
  • ubuntu虚拟机roslaunch usb_cam usb_cam-test.launch报错

    运行roslaunch usb cam usb cam test launch后出现 警告Unable to open camera calibration file home hri ros camera info head camera
  • boringssl android编译,boringssl_self_test.cpp

    boringssl self test cpp Copyright C 2018 The Android Open Source Project Licensed under the Apache License Version 2 0 t
  • 几个C++ online test 网站

    http www mycppquiz com list php http www codelect net TestDetails Cplusplus Senior Level Test http careerride com c 43 4
  • test

    lt DOCTYPE html gt lt html lang 61 34 en 34 gt lt head gt lt meta charset 61 34 utf 8 34 gt lt meta http equiv 61 34 X U
  • proto_cmake_test

    proto cmake test Proto与CMAKE结合编译源代码 工程编译 span class token function cd span build cmake span class token punctuation span
  • TestNG测试的并发执行详解

    TestNG在执行测试时 默认suitethreadpoolsize 1 randomizesuites false 即非并发顺序执行测试 但是TestNG提供了多种方式 以支持测试的并发多线程执行 1 针对多个测试规划的情况 为每个tes
  • IDEA的Junit安装(添加jar包)

    1 安装junit插件 1 打开IDEA 点击文件 选择设置 setting 2 选择Plugins gt 点击Browse repositories 3 在搜索框中搜索Junit gt 找到Junit Generator V2 0点击 g
  • 修改mysql的时间/时区

    应用背景 有时候会发现数据库存储的时间与当前所在地区的时间不同 尤其是涉及到全球业务的时候 如果有些程序是根据时间判断来进行后面的逻辑 往db中insert数据发现时间不对 尤其是新DB 可能是mysql设置不对 这时由于时区问题影响存入的
  • shell test功能

    test测试功能 对于要测试系统上面某些文件或其相关属性时 可以使用test进行测试 test会根据相关功能返回True或False 测试文件类型test e filename 测试功能 意义 e 该文件是否存在 f 该文件名是否存在且为文
  • Selenium脚本转化Java代码

    Selenium录制的脚本可以转换Java JUnit单元测试 可以使用Java项目管理工具Maven统一运行 从Selenium脚本中导出Java代码 按照如下步骤 使用Java运行Selenium脚本 使用Chome导出Java脚本必须
  • 嵌入式经典面试题

    文章目录 一 常见面试题 1 用预处理指令 define 声明一个常数 用以表明1年中有多少秒 忽略闰年问题 2 写一个 标准 宏MIN 这个宏输入两个参数并返回较小的一个 3 预处理器标识 error的目的是什么 4 数据声明 5 sta

随机推荐

  • 树莓派下opencv3.4.0的安装与错误处理

    1 opencv3 4 0的下载 1 可以在树莓派的终端界面通过wegt命令下载 但下载速度可能很慢 终端输入下列代码进行下载 cd home pi Downloads wget https github com Itseez opencv
  • 【ElementUI组件】视频上传+计算视频时长

    效果如下 实现步骤 1 首先先安装官网的操作步骤安装elementui 或者 不安装直接引入 安装指令 npm i element ui S 引入方式 2 以下是参考代码 HTML代码 div div
  • 内网端口转发及穿透-

    转 内网端口转发及穿透 最近尝试了一些内网端口的转发和内网穿透 现在一起总结一下 0x01 正向和反向代理 正向代理中 proxy和client同属一个LAN 对server透明 反向代理中 proxy和server同属一个LAN 对cli
  • 执行npm install 时报错 Host key verification failed

    问题 安装依赖的时候出现Host key verification failed问题 整理了一下解决流程 1 要在git设置一下身份的名字和邮箱 git config global user name yourname gt 用户名 git
  • Unity中自定义协程函数

    Unity中提供了协程的方法 在处理一些需要异步的函数时非常方便 尤其是在处理网络请求响应的时候 但是协程函数有些时候需要自定义 这就需要自己实现满足条件的协程函数了 好在Unity提供了这样的类来帮助我们实现相关的功能 通过继承Custo
  • Springboot2.0中webflux到底优秀在哪里

    Spring boot webflux中所说的反应堆式编程reactor到底优秀在哪里 小编的Springboot2 0的课程已经快全部写完了 总结来看 对于有基础的同学学习难度不是很大 一周内就能上手 但是在小编看来编程如果说只会用 而不
  • 记一次wwwscan目录扫描后获取敏感目录登录后台

    1 开启wwwscan工具 2 配置信息 目标域名不要带协议头 直接www xxx com或者192 168 67 xxx 3 点击 扫描 等待扫描之后会在wwwscan的同级目录下生成结果文件 4 打开第三个文件 5 点击访问 说明 tx
  • [机器学习与scikit-learn-31]:算法-回归-线性模拟拟合拟合非线性数据-概述

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 123555129 目录 第1章 什么是
  • 进程和线程的详解和区别

    1 进程和线程概述 我们都知道计算机的核心是CPU 它承担了所有的计算任务 而操作系统是计算机的管理者 它负责任务的调度 资源的分配和管理 统领整个计算机硬件 应用程序是具有某种功能的程序 程序是运行于操作系统之上的 2 进程 我们编写的代
  • 交直流双电源无缝切换

    使用ATmega32编写交直流双电源无缝切换 输入过欠压保护 输出过流保护 主要使用了单片机自带的比较器功能 比较器的一端使用了LT431制作的2 5V基准源 include iom32v h define WDR asm WDR defi
  • 尚硅谷nodejs操作mongodb报错,MongoNotConnectedError: Client must be connected before running operations【已解决】

    1 准备好第一步的静态案例 2 启动mongodb服务 在cmd运行mongod Waiting for connections attr port 27017 ssl off 3 准备mongoose数据库模块化 4 新建AccountM
  • this.$el.querySelectorAll is not a function报错解决

    问题描述 使用el tree时 报错this el querySelectorAll is not a function 导致树无法渲染 问题解析 参考如下代码片段
  • [激光原理与应用-66]:激光器-器件 - 二极管

    第1章 二级管的基本原理 1 1 原理 现在的电子产品中 元件应用最多的是半导体材料 在集成电路中 也是应用的半导体单晶硅作为基底 通过离子注入技术而添加了硼和磷元素从而构成数以亿计的半导体晶体管 对于半导体元件来说 发挥作用的是PN结 在
  • 5G/NR 随机接入过程之Msg2

    21 6 Msg2 UE发送了preamble之后 将在RAR时间窗 RA Response window 内监听PDCCH 以接收对应RA RNTI的RAR 此时不考虑可能出现的测量gap 如果在RAR时间窗内没有接收到gNB回复的RAR
  • RPA经验分享--离线识别普通验证码

    了解RPA www i search com cn 学习RPA https support i search com cn 下载RPA https www i search com cn from csdn 前言 以下方法适用于简易的验证码
  • 【Linux】进程控制2-进程等待

    文章目录 进程等待 进程等待的必要性 wait函数 waitpid函数 进程等待 进程等待的必要性 我们之前提到过僵尸进程 僵尸进程就是子进程先于父进程退出 子进程的退出状态信息发送给父进程但是父进程忽略处理 子进程就变成了僵尸进程 解决僵
  • programming massively parrellel processors(1)

    I have to say this is a very good book to learn more about cuda especially for a novice like me who take interest in par
  • 入职字节两个月,实在卷不动,还是离职了

    对自己收入不满意 就看下自己每天做了什么 把每天记录下来 看下自己的时间都用在哪里了 对自己的时间分配搞清楚了 就可以着手去改进 如果一直糊涂的过 时间到了报复就来了 时间管理很简单 不过大多数人是不会重视的 别总抱怨自己赚钱少 关键你做了
  • Asgard King(埃氏筛法)

    Description Thor had great power but his arrogant and reckless behavior set off an ancient war and he was demoted into t
  • Mock介绍

    mock的定义 what mock是在测试过程中 对于一些不容易构造 获取的对象 创建一个mock对象来模拟对象的行为 为什么要使用mock why 在做单元测试过程中 经常会有以下的场景 class A 依赖 class B class