go mock模拟接口的实现

简介
mock翻译过来是‘模拟’的意思,也就是模拟接口返回的信息,用已有的信息替换接口返回的信息,从而提供仿真环境,实现模拟数据下的功能测试;

在多人合作编码时,你写的一个函数func DoSth(People)用到了别人写的People接口。此时你的函数已经写好了,但是实现People接口的程序员还在磨蹭,而这时你想要测试func DoSth()是否正确运行,就需要gomock接口模拟技术。


导包
安装gomock包以及mockgen(mock代码生成器)

1

2

go get -u github.com/golang/mock/gomock

go install github.com/golang/mock/mockgen

使用步骤

1.构造代码
type People interface {GetName() stringGetAge() int}func GetPeopleInfo(people People) {//调用接口println("name:", people.GetName(), "age:", people.GetAge())}

示例构造了一个函数GetPeopleInfo(People),调用了People接口。

2.使用mockgen生成mock代码

mockgen主要有两种使用方式:

1.通过source构建:从源文件生成 mock 接口(通过 -source 启用)

1

mockgen -source=foo.go [other options]

2.通过reflect构建:通过使用反射程序来生成 mock 接口。它通过传递两个非标志参数来启用:导入路径和逗号分隔的接口列表

1

mockgen database/sql/driver Conn,Driver

具体参数可以在命令行输入mockgen进行查看。

本文中使用2进行mock代码的构建

代码结构:

Test├── gomock2└── db.go

使用的mockgen命令:

1

mockgen  -destination db_mock.go -package gomock2 Test/gomock2 People

-destination db_mock.go:表明生成的mock代码存放在db_mock.go
-package gomock2:生成代码所属包名为gomock2
Test/gomock2 People :对Test/gomock2下的People接口进行模拟 

成功后会生成db_mock.go文件。

3.建立测试用例
func TestGetFromDB(t *testing.T) {//创建mock控制器,控制器controller := gomock.NewController(t)defer controller.Finish()//触发最后的断言mockPeople := NewMockPeople(controller)mockPeople.EXPECT().GetName().Return("yi")mockPeople.EXPECT().GetAge().Return(18).Times(1) //预计返回18并被调用1次//调用测试方法 GetPeopleInfo(mockPeople)}

主要有下面几个步骤:
1.创建mock控制器,控制器定义了mock对象的作用域、生命周期、期待值。
2. defer controller.Finish():触发断言,判断结果是否符合预期。
3. 创建Mock对象:Mock对象实现了要模拟的接口。
4. 设计预期值,接口的输入、返回。
5. 调用测试方法。


go:generate生成mock代码
在interface所对应的go文件中加入注释:

1

//go:generate mockgen  -destination db_mock.go -package gomock2 Test/gomock2 People

随后在命令行的当前目录下执行下面语句就能自动生成mock代码

1

go generate

或者在项目根目录输入,执行当前项目中所有go:generate注释表示的内容。

1

go generate ./...

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助

 视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。  

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

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

相关文章

【备战蓝桥杯】图论重点 敲黑板啦!

蓝桥杯备赛 | 洛谷做题打卡day11 文章目录 蓝桥杯备赛 | 洛谷做题打卡day11杂务题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 题解代码我的一些话 杂务 题目描述 John 的农场在给奶牛挤奶前有很多杂务要完成,每一项杂务都需要一定的时间来完成它。比如&a…

c#让三个线程按照顺序执行

现实的例子 三个线程都是while(true)的循环体 A线程:采集数据 B线程:画曲线 C线程:存数据库 AutoResetEvent类 AutoResetEvent 是一个线程同步的类,它提供了一种机制,允许一个或多个线程等待直…

Unity之四元数

欧拉角 万向节死锁 四元数是什么 Unity中四元数的初始化 四元数和欧拉角的互相转换 补充 四元数相乘代表旋转四元数

Linux Shell脚本入门

目录 介绍 编写格式与执行方式 Shell脚本文件编写规范 脚本文件后缀名规范 首行格式规范 注释格式 shell脚本HelloWord入门案例 需求 效果 实现步骤 脚本文件的常用执行三种方式 介绍 3种方式的区别 小结 多命令处理 Shell变量 环境变量 目标 Shell变量的介绍 变量类型 系统环境…

计算机毕业设计 基于SpringBoot的红色革命文物征集管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

学习JavaEE的日子 day12 构造方法 类的制作

Day12 需求:创建人类的对象,并操作对象 分析: 人类 - Person 属性:name、sex、age 方法:eat、sleep 场景:创建多个对象,去操作对象 //测试类:该类中有main方法,测试我们写…

F - Digital Roots HUOJ

题目 The digital root of a positive integer is found by summing the digits of the integer. If the resulting value is a single digit then that digit is the digital root. If the resulting value contains two or more digits, those digits are summed and the pro…

让你的Pandas代码快得离谱的两个技巧

如果你曾经使用过Pandas处理表格数据,你可能会熟悉导入数据、清洗和转换的过程,然后将其用作模型的输入。然而,当你需要扩展和将代码投入生产时,你的Pandas管道很可能开始崩溃并运行缓慢。在这篇文章中,笔者将分享2个技…

项目管理十大知识领域之项目质量管理

一、项目质量管理概述 项目质量管理是指通过计划、组织、控制和监督项目过程,以确保项目满足特定的质量要求的一系列活动。项目质量管理是整个项目管理体系中不可或缺的一部分,它涉及到对项目所涉及的产品或服务的质量进行规划、控制和保证的过程。在项…

【面试】测试/测开(ING3)

190. 栈和堆在内存管理上的区别 栈 1) 栈是由系统自动分配和回收的内存。 2)栈的存储地址是由高地址向低地址扩展的。 3)栈是一个先进后出的结构。 4)栈的空间大小是一个在编译时确定常数,即栈的大小是有限制的&#x…

Kubernetes的minikube

文章目录 环境概述准备安装启动和集群交互dashboard创建deployment创建service启用addon清理参考 环境 RHEL 9.3Docker Community 24.0.7miniKube v1.32.0 概述 minikube可以快速的在macOS、Linux和Windows上搭建本地的Kubernetes集群,帮助Kubernetes小白快速上手…

鲁大师2023年牛角尖颁奖盛典揭晓,年度最强产品诞生

1月18日,鲁大师2023年度牛角尖颁奖典礼在四川省内江市威远县船石湖豪生温泉度假酒店完美落幕。 本届鲁大师牛角尖颁奖盛典举办地选在了威远县可谓是深有其意,其名称的由来最早可追溯到隋朝,取“威名远震”之意。而这也与鲁大师牛角尖奖项的设…

用通俗易懂的方式讲解:使用Llama-2、PgVector和LlamaIndex,构建大模型 RAG 全流程

近年来,大型语言模型(LLM)取得了显著的进步,然而大模型缺点之一是幻觉问题,即“一本正经的胡说八道”。其中RAG(Retrieval Augmented Generation,检索增强生成)是解决幻觉比较有效的…

自建呼叫中心还是使用云呼叫中心?

随着云呼叫技术的逐渐普及,云呼叫中心在全国的推广,越来越多中小企业开始使用云呼叫中心开展企业外呼及电话客服业务。但还是有很多企业坚持使用传统的自建呼叫中心。那么云呼叫中心跟自建呼叫中心有什么区别呢?企业又该作何选择?…

百德朗王晓明:用差异化创新,解决智能楼控项目深层痛点

近年来,国家对物联网产业的支持政策不断释放,《“十四五”数字经济发展规划》明确提出了要加速空间信息基础设施升级。作为AIoT控制系统核心技术引领者是如何看待物联网时代下的智慧楼宇与能源应用发展的呢?近日,百德朗联合创始人…

回归预测 | Matlab实现GA-APSO-MBP、GA-MBP、MBP、BP多输入单输出回归预测

回归预测 | Matlab实现GA-APSO-MBP、GA-MBP、MBP、BP多输入单输出回归预测 目录 回归预测 | Matlab实现GA-APSO-MBP、GA-MBP、MBP、BP多输入单输出回归预测预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab实现GA-APSO-MBP、GA-MBP、MBP、BP多输入单输出回归预测&…

Redis持久化方案RDB和AOF

Redis两种持久化方案 RDB持久化AOF持久化 RDB持久化 RDB全称Redis Database Backup file(Redis数据备份文件),也被叫做Redis数据快照。简单来说就是把内存中的所有数据都记录到磁盘中。当Redis实例故障重启后,从磁盘读取快照文…

2024年pmp的考试时间是什么时候?

2024最新考试时间已经出来了:分别是 3月、6月、8月、11月,四次,具体考试日期还需要关注官网的进一步通知。 一、PMP报考条件 年龄满足 22 周岁有官方授权的培训机构给的 35个PDU(学时) 就能报名。 是不是相当于没有…

13 STM32-随机数发生器 (RNG)

13.1 随机数发生器 (RNG)简介 RNG 处理器是一个以连续模拟噪声为基础的随机数发生器,在主机读数时提供一个 32 位的随机数. RNG 提供由模拟量发生器产生的 32 位随机数,两个连续随机数的间隔为 40 个 PLL48CLK 时钟信号周期 13.2 RNG框图 随机数发生器采用模拟电路…

SpringCloud整合Zookeeper代替Eureka案例

文章目录 本期代码下载地址zookeeper简介zookeeper下载安装新建服务提供者测试 新建消费者测试 本期代码下载地址 地址:https://github.com/13thm/study_springcloud/tree/main/days4 zookeeper简介 zookeeper是一个分布式协调工具,可以实现注册中心功能 关闭Lin…