浅谈Mock测试

mock测试

就是在测试过程中,对于某些不容易构造或者 不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。

mock对象

这个虚拟的对象就是mock对象。mock对象就是真实对象在调试期间的代替品。

mock对象使用范畴

真实对象具有不可确定的行为,产生不可预测的效果,(如:股票行情,天气预报) 真实对象很难被创建的 真实对象的某些行为很难被触发 真实对象实际上还不存在的(和其他开发小组或者和新的硬件打交道)等等.

使用mock对象测试的关键步骤

使用一个接口来描述这个对象 在产品代码中实现这个接口 在测试代码中实现这个接口 在被测试代码中只是通过接口来引用对象,所以它不知道这个引用的对象是真实对象还是mock对象。

MOCk前期准备

使用mock要先在程序中导入mock包,使用powermock就导入powermock这个包,使用mockito就导入这个包

Mocktio 在程序中可以import org.mockito.Mockito;然后调用它的static方法,或者import static org.mockito.Mockito.*;个人倾向于后者,因为这样可以更方便些

Mock使用的常用简单语句有下面,当然这不是mock全部语句,只是本人常用的语句:

  1. Mock对象的创建

mock(class or interface)

    假设我们创建Iterator接口的mock对象

     Iterator<String> i = mock(Iterator.class)

  1. 对方法设定返回值

 When(mock.someMethod()).thenReturn(value)

     when(i.next()).thenReturn(“hello”)

   也可以迭代返回值设定when(i.next()).thenReturn(“hello”).thenReturn(“world”)

  1. 对方法设定返回异常

When(i.next()).thenthrow(new RuntimeException())

  1. Mock对象行为验证

 verify(mock).someMethod(…)

下面是在一个开发工具中使用mock一个简单实例:

使用背景:此开发工具创建时自动生动5个项目,分别为data项目、impl项目、service项目、test项目、web项目;其中一个test项目,用于测试前面四个项目

简单操作四个项目:在data项目中创建DAO,数据访问向导,即po层

                  在impl项目中创建ROLE,角色层

                  用ROLE调用DATA

                 最后用test项目测试是否ROLE中调用DAO是否成功

下面是一段简单的test项目中调用的过程:

import com.ygsoft.ecp.abc.data.service.IHHDao;
import com.ygsoft.ecp.abc.test.data.HHDaoTest;
import org.junit.Test;
import static org.junit.Assert.fail;
import static org.powermock.api.mockito.PowerMockito.mock;
import static org.powermock.api.mockito.PowerMockito.when;/*** DDRole.<br>*/
public class DDRoleTest {@Testpublic void testMethod0() throws Throwable {HHDao test = mock(HHDao.class);//when(test,"method","aa").thenReturn("m1234");when(test,"method","kk").thenCallRealMethod();System.out.println(test.method("kk"));when(test,"method","kk").thenThrow(new NullPointerException());test.method("hh");
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/86233.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

容器技术所涉及Linux内核关键技术

目录 一、容器技术前世今生 1.1 1979年 — chroot 1.2 2000年 — FreeBSD Jails 1.3 2001年 — Linux VServer 1.4 2004年 — Solaris容器 1.5 2005年 — OpenVZ 1.6 2006年 — Process容器 1.7 2007年 — Control Groups 1.8 2008年 — LXC 1.9 2011年 — Warden 1…

手写call方法

Function.prototype.myCallfunction (context,args) {console.log(arguments)//context 表示call里面的第一个参数也就是需要改变this指向的那个对象。//this表示这个方法//把这个方法挂到需要改变指向的对象身上调用&#xff0c;相当于把this指向了这个对象身上&#xff0c;从…

Nginx 代理 MySQL 连接

文章目录 Nginx 代理 MySQL 连接1. 前言2. 部署 Nginx&#xff0c;MySQL3. ngx_stream_core_module 配置方式3.1 stream3.2 server3.3 listen3.4 配置示例 4. 限制访问 IP4.1 allow4.2 deny4.3 配置示例 5. 综合案例 Nginx 代理 MySQL 连接 原文地址&#xff1a;https://mp.wei…

如何用好免费的ChatGPT

如何用好免费的ChatGPT 前言ChatGPT使用入口在线体验地址&#xff1a;点我体验 ChatGPT介绍ChatGPT初级使用技巧初级使用技巧&#xff1a;清晰明了的问题表达 ChatGPT中级使用语法中级使用语法&#xff1a;具体化问题并提供背景信息 ChatGPT高级使用高级使用&#xff1a;追问、…

JMeter:断言之响应断言

一、断言的定义 断言用于验证取样器请求或对应的响应数据是否返回了期望的结果。可以是看成验证测试是否预期的方法。 对于接口测试来说&#xff0c;就是测试Request/Response&#xff0c;断言即可以针对Request进行&#xff0c;也可以针对Response进行。但大部分是对Respons…

推动统一供应链“度量衡”,上汽大通突破传统拥抱SaaS生态

中国汽车市场规模已连续14年位居世界第一&#xff0c;目前占世界汽车份额31%。近年来&#xff0c;物联网、人工智能、电池等技术的快速发展&#xff0c;也为中国从汽车大国逐步迈向汽车强国注入巨大动力。在新一轮的汽车产业变革中&#xff0c;构建一个更智能、更高效协同的供应…

[Linux入门]---git命令行的基本使用

文章目录 1.git使用gitee仓库创建git使用测试ignore文件 1.git使用 git是一款对文件进行版本控制的软件&#xff0c;gitee、github是基于git软件搭建的网站&#xff0c;是可以对代码进行托管的平台&#xff1b;github是国外的网站&#xff0c;访问慢&#xff0c;不稳定&#xf…

RobotFramework+Eclispe环境安装篇

【软件测试面试突击班】如何逼自己一周刷完软件测试八股文教程&#xff0c;刷完面试就稳了&#xff0c;你也可以当高薪软件测试工程师&#xff08;自动化测试&#xff09; 环境安装是学习任何一个新东西的第一步&#xff0c;这一步没走舒坦&#xff0c;那后面就没有心情走下去了…

Docker赋能物联网:探索软件供应链的优势、挑战和安全性

作者&#xff1a;JFrog大中华区总经理董任远 随着联网设备硬件性能的日益提升及价格愈发低廉&#xff0c;物联网应用的复杂性随之提升。常用的容器化平台Docker能够帮助精简流程&#xff0c;助力开发人员更轻松地创建和维护物联网应用。本文将探讨Docker为物联网开发带来的优势…

【C语言学习笔记---字符串函数】

C语言程序设计笔记---018 C语言字符串函数1、字符串函数1.1、strlen函数1.2、strcpy函数1.3、strcat函数1.4、strcmp函数1.5、strncpy函数1.6、strncat函数1.7、strncmp函数1.8、strstr函数1.9、strtok函数1.10、strerror函数 2、字符分类函数2.1、islower函数2.2、isdigit 和 …

docker镜像相关

docker镜像相关 docker镜像相关理解解释unionFS&#xff08;联合文件系统&#xff09;镜像加载原理docker镜像要采用这种分层结构 重点理解docker镜像commit 操作实例案例演示总结 docker镜像相关理解 解释 镜像是一种轻量级&#xff0c;可执行的独立软件包&#xff0c;它包含…

Vue基础知识点(面试可用):v-if和v-show的区别

① 简述v-if和v-show的区别&#xff1f; v-if 在编译过程中会被转化成三元表达式&#xff0c;条件不满足时不渲染此节点。元素销毁和重建控制显示隐藏。 v-show 会被编译成指令&#xff0c;条件不满足时控制样式将此节点隐藏&#xff08;display:none&#xff09; css样式控制…

【Datawhale课程笔记-简单学点大模型】模型架构

模型架构 参考地址&#xff1a;https://github.com/datawhalechina/so-large-lm/blob/main/第七章&#xff1a;模型架构.md 大模型之模型概括 语言模型的一开始就可以被看做是一个黑箱&#xff0c;当前大规模语言模型的能力在于给定一个基于自身需求的prompt就可以生成符合需…

Redis学习笔记--002

Redis的JAVA客户端 文章目录 Redis的JAVA客户端一、Redis的Java客户端的种类二、Jedis2.1、使用步骤2.2、Jedis连接池 三、[SpringDataRedis](https://spring.io/projects/spring-data-redis)3.1、介绍3.2、RedisTemplate3.3、SpringDataRedis使用步骤3.4、SpringDataRedis的序…

RabbitMQ工作模式——PubSub生产者及消费者

PubSub模式生产者代码 public class Producer_PubSub {public static void main(String[] args) throws IOException, TimeoutException {//1.创建连接工厂ConnectionFactory factory new ConnectionFactory();//2.设置参数factory.setHost("172.16.98.133"); ip 默…

JavaWeb 学习笔记 8:AJAX

JavaWeb 学习笔记 8&#xff1a;AJAX AJAX&#xff08;Asynchronous JavaScript And XML&#xff0c;异步 js 和 XML&#xff09;是一种用 js 代码异步&#xff08;或同步&#xff09;的方式请求服务端数据&#xff0c;并在页面显示或加载的技术。 1.快速入门 先看如何用纯 …

STM32-无人机-电机-定时器基础知识与PWM输出原理

电机控制基础——定时器基础知识与PWM输出原理 - 掘金单片机开发中&#xff0c;电机的控制与定时器有着密不可分的关系&#xff0c;无论是直流电机&#xff0c;步进电机还是舵机&#xff0c;都会用到定时器&#xff0c;比如最常用的有刷直流电机&#xff0c;会使用定时器产生PW…

Linux学习记录——삼십 socket编程---udp套接字

文章目录 UDP套接字简单通信1、服务端1、创建文件&#xff0c;写框架2、用命令行参数调起程序3、服务端运行逻辑 2、客户端1、创建套接字2、发送数据 3、测试4、通信5、加功能1、处理数据2、群聊 6、Windows下socket编程的不同 UDP套接字简单通信 1、服务端 1、创建文件&…

【C语言学习笔记---内存函数】

C语言程序设计笔记---019 C语言进阶之内存函数1、memcpy函数1.1、模拟实现memcpy 2、memmove函数2.1、模拟实现memmove函数 3、memset函数4、memcmp函数5、结语 C语言进阶之内存函数 前言&#xff1a; 通过C语言进阶前篇的字符串函数的知识&#xff0c;继续C语言的内存函数学习…

vue+element plus 使用table组件,清空用户的选择项

<el-table ref"tableRef"> .... </el-table> <script lang"ts" setup> import { onMounted, reactive, ref, nextTick } from vue const clearBtn () > {console.log(清空用户的选择项)tableRef.value.clearSelection() } </scr…