Mock介绍

article/2025/9/15 12:30:51
  • mock的定义(what):

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

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

class A 依赖 class Bclass B 依赖 class C和class Dclass 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


http://chatgpt.dhexx.cn/article/JT4fGSEt.shtml

相关文章

Mockito单元测试

文章目录 Mockito单元测试为什么要使用Mock?导入依赖import导入包使用Mock模拟测试某个类中的某个方法是否可以成功执行使用Mock模拟某个类的方法,自己给这个方法返回我们指定的值使用Mock模拟某个方法调用后会抛出指定的异常使用Mock模拟测试某个类中的某个方法(加…

javascript 中怎么判断为数字类型

javascript中判断变量是否为数字类型抄的方法有两种: 方法一: function isnum(s) { if(s!null){ var r,re; re /\d*/i; //\d表示数字,*表示匹配多个数字 r s.match(re); return (rs)?true:false; } return false; } 方法二: function isnu…

js判断字符串是不是一个纯数字

1.使用隐式转换判断 使用parseInt()/parseFloat()会把其他类型转换为数值,转换结果为数值或NaN,转换字符串的时候,头部内容有数值就会截取前面,如123456aff789bb转成123456,后面即使有数字也不会转换处理,开头如果是字…

javaScript 判断是否为数值类型的三种方法

第一种方法:isNaN(value) isNaN : isNaN() 函数用于检查其参数是否是非数字值。 返回true则判断为非数值。缺点:空字符串,空格 ,null会做为数字0进行处理,结果为falsehttps://www.w3school.com.cn/js/jsref_isnan.anusp 第二种方法…

JS中判断变量是否为数字方法

推荐教程:《JavaScript视频教程》 JavaScript 是一种动态类型语言,这意味着解释器在运行时确定变量的类型。实际上,这也允许我们在相同的代码中使用相同的变量来存储不同类型的数据。如果没有文档和一致性,我们在使用代码时并不总…

matlab绘制图形中,常用函数调用(num2str,disp,gcf,hold on,plot,axis,subplot,line,stairs,grid,set,gca)

num2str 将数字转换为字符数组 s = num2str(A) 将数字数组转换为表示数字的字符数组。输出格式取决于原始值的大小。 num2str对于使用数值标注和标题绘图非常有用。 s = num2str(A,precision) 返回一个字符数组,表示具有精度指定的最大有效位数的数字。 s = num2str(A,fo…

Matlab中num2str函数使用

目录 语法 说明 示例 浮点值的默认转换 指定精度 指定格式 num2str函数将数字转换为字符数组。 语法 s num2str(A)s num2str(A,precision)s num2str(A,formatSpec) 说明 s num2str(A) 将数值数组转换为表示数字的字符数组。输出格式取决于原始值的量级。num2str 对…

C/C++ split函数 num2str str2num函数

C/C split函数,num2str及str2num函数实现 在C98及其以下版本的C/C中,没有现成的字符串split函数和num2str及str2num函数,对于竞赛不能使用C11的我来说非常头疼,通过学习stringstream和strtok实现了自己的split函数,通过stringstr…

matlab 中num2str函数的使用

运行ECO代码报错:转义字符 ‘\d’ 无效。有关支持的特殊字符,请参阅 ‘doc sprintf’。 num2str函数功能:将数字转换为字符串 具体所有功能可见官网。 这里使用的格式为: str num2str(A, format) 将 format 指定的格式应用到 A …

js基础运用——js用*打印三角形,菱形

js基础运用 新手见解,有不足或更简单的方法希望各位指点 1.用*排列直角三形 (图一) (图二) 图一图二是js语句利用*号画出来的直角三角形,方法思路都一致,下面以图一为例讲一下本人所用的方法…

java:打印十字图

java:打印十字图 题目 问题描述 小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示:..$$$$$$$$$$$$$.. ..$...........$.. $$$.$$$$$$$$$.$$$ $...$.......$...$ $.$$$.$$$$$.$$$.$ $.$...$...$...$.$ $.$.$$$.$.$$…

JAVA 利用JFram,JPanel,JScrollPane简单文本框实现

****1.JFram 支持通用窗口的所有基本功能 2…JPanel是一个无边框,不可以被移动的,放大的,缩小的,或者关闭的面板,默认布局是FlowLayout(也可用setLayout()来设定)** 3……

deflater java_Java Deflater finished()用法及代码示例

如果已到达压缩数据输出流的末尾,则java.util.zip中Deflater类的finished()函数将返回true。 函数签名: public boolean finished() 用法: d.finished(); 参数:该函数不需要参数 返回类型:该函数返回布尔值,即如果所有…

jQuery API ( 三 ) -------- 链式编程 与 修改样式方法

今天这篇文章是 jQuery API 的第三篇,今天心情很好,因为破了300粉,希望所有代码人前端人在编程与写作的路上都能一帆风顺,全都早日拿认证。okk言归正传,这篇文章将带大家走进链式编程的世界,这也是 jQuery …

jsfiddle 使用教程

最近有许多的Css 3 demo,因此为了方便查阅,就将demo部分放在 jsfiddle ,方便日后翻阅。 这是 JSFIDDLE 的官网文档,都是英文,不过对照看还是可以的:官方文档 HTML区域: 它的HTML区域已经包含 ht…

Jfinal 框架 在Html页面使用 #if(调用java方法) #end

欢迎转发分享, 转发请附上本文地址: https://blog.csdn.net/Luoxianxun/article/details/106399780 一、实现需求 实现在html 中使用 #if(调用java类中的方法) #end; 二、使用技术 JFinal后台框架 JFinal 官方文档:https://jfi…

java文本框代码_Java Swing JTextField文本框的代码示例

1. 概述 官方JavaDocsApi: javax.swing.JTextField JTextField,文本框。JTextField 用来编辑单行的文本。 JTextField 常用构造方法: /* * 参数说明: * text: 默认显示的文本 * columns: 用来计算首选宽度的列数;如果列设置为 0,则首选宽度将…

java的StringBuilder、Stringjoiner

一、StringBuilder StringBuilder可以看成是一个容器,创建之后里面的内容是可变的。作用是提高字符串的操作效率。 注意:使用String创建字符串对象时,是不能改变字符串的内容的,例如: String s1 "aaa"; St…

swing的JTextField的介绍及其使用方法

:JTextField的(文本框)使用: JTextField 是一个轻量级组件,它允许编辑单行文本。 1.JTextField的常用构造方法: JTextField() 构造一个新的 TextField。 JTextField(int columns) 构造一个具有指定列数的新的空 TextField。 JTextField(String text) 构造一个用…

十字链表简介与实现(Java)

十字链表简介与实现(Java) 结构实现 结构 十字链表存储有向图(网)的方式与邻接表有一些相同,都以图(网)中各顶点为首元节点建立多条链表,同时为了便于管理,还将所有链表…