GOLANG宽泛接口在测试中的大用处
原文:https://gocn.io/publish/article/368 考虑测试一个函数: func request(ctx context.Context,hc *http.Client,api string) (err error) {
var hreq *http.Request
if hreq,err = http.NewRequest("GET",api,nil); err != nil {
return nil,errors.Wrap(err,"create request")
}
var hres *http.Response
if hres,err = hc.Do(hreq.WithContext(ctx)); err != nil {
return nil,"do request")
}
defer hres.Body.Close()
var body []byte
if body,err = ioutil.ReadAll(hres.Body); err != nil {
return nil,"read body")
}
// ......
return nil
}
这个函数的参数是一个 type mockHttpClient struct { http.Client }
但是,问题是这样总是很恶心不是吗?就像如果是C++中,我们只能写一个mock类从要测试的类继承,但是我们只需要重写
在GOLANG中,有个非常牛逼的方法,就是创建一个私有的接口,使用时用接口: type httpDoer interface { Do(req *http.Request) (*http.Response,error) }
func request(ctx context.Context,hc httpDoer,api string) (err error) {
// ......
可以发现,很神奇的是,调用者也可以给 一行代码处,深藏功与名~ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |