单元测试gomonkey不能替换sql.DB的方法

sdghchj · 2020-02-13 16:16:58 · 983 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2020-02-13 16:16:58 的主题,其中的信息可能已经有所发展或是发生改变。

DEBUG运行时正常的, 直接运行就在Ping处抛异常

import (
    "database/sql"
    "github.com/agiledragon/gomonkey"
    "reflect"
    "testing"
)

func TestMysql(t *testing.T) {
    db := &sql.DB{}
    tp := reflect.TypeOf(db)
    patches := gomonkey.ApplyFunc(sql.Open, func(driverName, dataSourceName string) (*sql.DB, error) {
        return db, nil
    })
    patches.ApplyMethod(tp, "Ping", func(db *sql.DB) error {
        return nil
    })
    defer patches.Reset()

    db,err := sql.Open("","")
    if err != nil {
        t.Error(err)
        return
    }
    err = db.Ping()   //运行时还是去调用了原本的Ping方法,不知道为什么
    if err != nil {
        t.Error(err)
        return
    }
    return
}
    C:/Go/src/runtime/panic.go:679 +0x1c0
database/sql.(*DB).conn(0xc000116000, 0xb5cf00, 0xc000018178, 0x88ed01, 0x9cc7e0, 0xac6470, 0x965283)
    C:/Go/src/database/sql/sql.go:1228 +0x1e4
database/sql.(*DB).PingContext(0xc000116000, 0xb5cf00, 0xc000018178, 0x0, 0xc000116000)
    C:/Go/src/database/sql/sql.go:782 +0x97
database/sql.(*DB).Ping(...)
    C:/Go/src/database/sql/sql.go:800

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

983 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传