zoukankan      html  css  js  c++  java
  • golang三大基础mock大法

    一、使用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呢?欢迎大家在下方留言讨论哦!

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

  • 相关阅读:
    java环境变量配置
    经纬度与度分秒转换
    Linux下屏幕截图
    mCustomScrollbar动态加载滚动条
    解决PHPExcel列超过26的问题
    解决PHPExcel长数字串显示为科学计数
    URL获取并修改参数【转】
    Windows下启动nginx,关闭nginx
    Linux 查看目录的相关权限
    Python文件装换成C文件,主要用于隐藏核心文件实现步骤
  • 原文地址:https://www.cnblogs.com/ExMan/p/15401964.html
Copyright © 2011-2022 走看看