简记Mock测试框架
时间:2021-07-31
本文章向大家介绍简记Mock测试框架,主要包括简记Mock测试框架使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
MOCK (模拟,模仿)
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>3.5.11</version>
<scope>test</scope>
</dependency>
-
mock的目的和作用: 模拟一些在应用中不容易构造或者比较复杂的对象,从而把测试与测试边界以外的对象隔离开,类似于容器。
-
Mockito实现原理: 通过CGLib在运行时为每一个被mock的类或者对象动态生成一个代理对象,返回预先设计的结果。
-
Stub打桩: 即在Mockito中使用when().thenReturn()这种语法来定义对象方法和参数输入,并且制定结果输出
- 对于static和final方法,不能进行打桩操作,
- 如果连续对同一个方法打桩,则只会使用最新的一次。
集成Mockito的基本步骤
- 标记被Mock的类或者对象,生成代理对象
- 通过Mockito API定制代理对象的行为
- 调用代理 对象的方法,获得预先设计的结果
Mockito框架的具体步骤
- 初始化mock的对象
-
在测试类前注解 @RunWith(MockitoJUnitRunner.class)
-
在@Mock注解的对象后,以及@Test注解之前声明 @Before public void setUp( ) throws Exception{ MockitoAnnotations.initMocks(this); }
- 上述两种初始化方式二选一即可
-
mock对象的使用
-
Mockito.when(...).thenReturn(...); //打桩, 当when中的方法以及指定的输入执行时,会直接返回指定的内容,而其他被mock的方法以及其他输入都会直接返回默认值;
-
Mockito.when (...).thenCallRealMethod(... ); //此时会执行被Mock对象中的真实方法并且按照其实际执行返回结果
-
验证调用次数:
Mockito.verify(mockObject,Mockito.times()).methodName(anyString()); //验证methodName方法执行了多少次
-
验证调用顺序:
InOrder inOrder = Mockito.inOrder(mockObject); inOrder.verify(mockObject).methodName(); inOrder.verify(mockObject).methodName();
-
局部模拟
通过Mockito.spy() 生成可局部模拟的对象,其余情况都保持真实情况,例如有一个类Hello,有 Hello spy=Mockito.spy(new Hello() ) //生成局部模拟对象 Mockito.when(spy.method2("sss")).thenReturn("gg"); //实际执行,但是返回的时候被替换了 assertEquals("gg", spy.method2("sss")); //模拟执行并返回 assertEquals("s2", spy.method2("s")); //按照真实情况执行并返回
并不执行方法,而是按照指定返回值返回
Mockito.doReturn(....).when(spy).method(....);
-
原文地址:https://www.cnblogs.com/zwwang/p/15084911.html
- windows下nvm安装node之后npm命令找不到问题解决办法
- 元素加了position:absolute则该元素的text-align:center居中失效的解决办法
- Chrome设置断点的各种姿势
- React-native踩坑小记
- 带修改莫队算法
- P2590 [ZJOI2008]树的统计
- #103. 子串查找
- P2051 [AHOI2009]中国象棋
- P2216 [HAOI2007]理想的正方形(二维RMQ)
- P3376 【模板】网络最大流(70)
- android客服端+eps8266+单片机+路由器之远程控制系统
- P2740 [USACO4.2]草地排水Drainage Ditches
- P1343 地震逃生
- html5 移动适配写法
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 使用Seq搭建免费的日志服务
- 拜托!这才是分布式系统CAP的正确打开方式!
- 接口管理这下总会了吧?
- 交子杯 - 2020 - AI赛道 - TOP1
- Valine 一款快速、简洁且高效的无后端评论系统
- 两段有趣的C代码
- 算法数据结构 | 三个步骤完成强连通分量分解的Kosaraju算法
- 并查集算法 详解
- SQL 中 EXISTS 用法详解
- Blazor带我重玩前端(六)
- PB 级大规模 Elasticsearch 集群运维与调优实践
- MySQL实时在线备份恢复方案
- Android通过原生请求直接获取网页内容
- matplotlib | Python强大的作图工具,让你从此驾驭图表(二)
- 设计模式 | Catalog设计模式,抵御业务方需求变动