agiledragon / gomonkey

gomonkey is a library to make monkey patching in unit tests easy
MIT License
1.96k stars 179 forks source link

似乎不兼容go1.14版本 #14

Closed linqh1 closed 4 years ago

linqh1 commented 4 years ago

go 1.11.4能跑通的单元测试代码,在go1.14中跑不通

linqh1 commented 4 years ago

image

linqh1 commented 4 years ago

测试了一下,如果直接跑单元测试的话,进不去gomonkey.ApplyMethod

但是如果开debug的话,又可以

`pathes := gomonkey.ApplyMethod(reflect.TypeOf(&http.Client{}), "Do", func(client http.Client, req http.Request) (*http.Response, error) {

    log.Println("enter gomonkey")  

    return nil, errors.New("mock http request failed")  

})

defer pathes.Reset()`

如上代码,直接run不会打印enter gomonkey,但是debug下可以打印出来。。。

kakisong commented 4 years ago

兄弟,我也是这个问题,有解吗 而且我现在跑1.13.5也有同样的问题了

kakisong commented 4 years ago

测试了一下在go test 与 dlv 的表现,发现是内联函数导致的 dlv 默认关闭了内联函数优化 所以 go test 的时候加上 -gcflags="all=-N -l" 就可以了

agiledragon commented 4 years ago

前两天试过了,gomonkey自带的所有用例,在go1.14版本都能执行通过

linqh1 commented 4 years ago

测试了一下在go test 与 dlv 的表现,发现是内联函数导致的 dlv 默认关闭了内联函数优化 所以 go test 的时候加上 -gcflags="all=-N -l" 就可以了

此方法可行,close