首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >golang三大基础mock大法

golang三大基础mock大法

作者头像
腾讯移动品质中心TMQ
发布2019-06-19 10:40:30
13.2K2
发布2019-06-19 10:40:30
举报

一、使用gomonkey来mock函数和方法 

1、mock函数

gomonkey.ApplyFunc(target,double)

其中target是被mock的目标函数,double是用户重写的函数。

注意点:重写的函数要和原函数入参和出参保持一致,否则会报错。

2、mock方法

gomonkey.ApplyMethod(reflect.TypeOf(s), "target",double  {
//mock方法实现})

s为目标变量,target为目标变量方法名,double为mock方法;同理double方法入参和出参需要和target方法保持一致。如下图示例:

二、使用sqlmock来mock数据库

官网链接:https://github.com/DATA-DOG/go-sqlmock

实际业务中query语句用的比较多,下面以query语句为例详细介绍sqlmock的用法(官网样例链接)。官网的示例解析如下图:

先了解sqlmock的4个大概步骤后,再来看看实际情况中需要注意的点:

1、初始化sqlmock后,需要将sqlmock的db实例赋值给实际调用的数据库,如下图所示:
稍微仔细思考下也能够理解,官网给的示例初始化sqlmock后都没有指定要mock哪个db,显然会抛异常。
2、如何mock返回错误?

使用WillReturnError方法构造返回错误,如下图所示:

3、gomonkey的ApplyMethod方法能不能替代sqlmock?不能!

如下图:被测方法为detailDb.Query(),如果使用gomonkey进行mock,则需要重新query方法:

Query方法的入参和出参如下图:出参包含Rows参数

再来看看Rows结构体,会发现里面的结构十分复杂,根本无法手工构造想要的数据。

综上,在示例特定场景下,无法使用gomonkey来替代sqlmock

4、sqlmock是否能覆盖所有sql场景?

目前发现开发底层都使用"github.com/go-sql-driver/mysql"数据库,都能够使用sqlmock库进行mock。

FAQ:sqlmock是否适用于gormdb呢?欢迎大家在下方留言讨论哦!

后期我们会根据每个维度陆续写相关的测试文章,如果你有兴趣,请关注我们哦。

长按指纹识别图中的二维码,获取更多测试干货分享!

 将我们公众号置顶 

 不会漏掉我们的原创干货哦!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯移动品质中心TMQ 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、mock函数
    • gomonkey.ApplyFunc(target,double)
      • gomonkey.ApplyMethod(reflect.TypeOf(s), "target",double  {
        • //mock方法实现})
          • 1、初始化sqlmock后,需要将sqlmock的db实例赋值给实际调用的数据库,如下图所示:
          • 稍微仔细思考下也能够理解,官网给的示例初始化sqlmock后都没有指定要mock哪个db,显然会抛异常。
          • 2、如何mock返回错误?
          • 4、sqlmock是否能覆盖所有sql场景?
      相关产品与服务
      数据库
      云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档