网站首页 > java教程 正文
什么是mock ?
mock在翻译过来是模拟的意思。这里要介绍的mock是辅助单元测试的一个模块。它允许你用模拟对象来替换你的系统的部分,并对它们已使用的方式进行断言。
什么意思呢?说的直白些,我们要测试一个模块(类、方法或接口),但是这个模块还没有实现,或者它属于第三方模块,真的去调用会比较麻烦,这个时候就可以借助 mock 技术,给该模块设置预期结果。
可能你和我一样会有疑问,把要测试的模块都mock掉了,这不是自己骗自己嘛,那我们还测什么?
但是,在实际生产中的项目是非常复杂的,对其进行单元测试的时候,会遇到以下问题:
接口的依赖
外部接口调用
测试环境非常复杂
单元测试应该只针对当前单元进行测试, 所有的内部或外部的依赖应该是稳定的, 已经在别处进行测试过的.使用mock 就可以对外部依赖组件实现进行模拟并且替换掉,从而使得单元测试将焦点只放在当前的单元功能。
mock技术的目的和作用就是模拟一些在应用中不容易构造或者比较复杂的对象,从而把测试与测试边界以外的对象隔离开。
什么是 Mockito ?
官方网站:http://site.mockito.org/
Tasty mocking framework for unit tests in Java
优雅的mock框架用于Java的单元测试。
GitHub 地址:https://github.com/mockito/mockito
安装 Mockito
以 Maven 方式安装为例。
<dependency> <groupId>org.mockito</groupId> <artifactId>mockito-all</artifactId> <version>2.0.2-beta</version> <scope>test</scope></dependency>
因为 Mockito是其于单元测试的框架,所以,接下来的练习最好在单元框架框架下运行,通过 Maven 配置 JUnit 单元测试框架。
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope></dependency>
mock 一个List,因为大家都知道它的接口(例如add(),get(), clear())。不要mock一个真实的List类型,使用一个真实的实例来替代。
验证某些行为
例子:
import org.junit.Test;import java.util.List; // 静态导入会使代码更简洁import static org.mockito.Mockito.*;public class MockitoDemo { @Test public void verify_behaviour() { // mock creation 创建mock对象 List mockedList = mock(List.class); //using mock object 使用mock对象 mockedList.add("one"); mockedList.clear(); //verification 验证 verify(mockedList).add("one"); verify(mockedList).clear(); } }
一旦mock对象被创建了,mock对象会记住所有的交互。然后你就可能选择性的验证你感兴趣的交互。
作者:西边人
关注今日头条号(软件测试资源站),回复如下关键词资料打包下载。
测试资料、工具、效率、自动化测试报告 等
猜你喜欢
- 2024-10-05 单元测试-(单元测试能发现约80的软件缺陷)
- 2024-10-05 Junit4入门之单元测试Junit介绍(junit4入门之单元测试junit介绍英文)
- 2024-10-05 五分钟技术趣谈 | Java常用的单元测试框架介绍
- 2024-10-05 「SpringBoot」 单元测试利器-Mockito
- 2024-10-05 如何使用Python进行单元测试(python单元测验答案)
- 2024-10-05 如何用TestNG进行java单元测试?(java中的test检测)
- 2024-10-05 干货篇-错过一次 错过一年!单元测试之Junit
- 2024-10-05 万字长文:一文详解单元测试干了什么
- 2024-10-05 一台不容错过的Java单元测试代码“永动机”
- 2024-10-05 新的单元测试工具已到位,Java程序员还不快来尝尝新?
你 发表评论:
欢迎- 最近发表
-
- 你真的会用 Java 中的线程池吗?多个企业级线程池工具类封装实践
- 线程池的实现原理、优点与风险、以及四种线程池实现
- Java线程池ThreadPoolExecutor实现原理剖析
- 深入分析线程池的实现原理(线程池是干嘛的)
- 一文搞懂JAVA线程池工作原理(java线程池的工作流程)
- Java线程池的工作原理(java线程池的实现原理)
- 5分钟读懂C#中TcpClient、TcpListener和Socket三个类的角色
- JVM对象的创建过程(jvm运行过程中创建的对象一般存放在方法区)
- 对象组成与Java内存模型JMM分析(java对象在内存中存储的结构)
- JVM对象内存分配详细过程(栈上分配->TLAB->老年代->Eden区)
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)