登录
首页 >  Golang >  Go问答

如何使用mockery来模拟httpclient

来源:stackoverflow

时间:2024-04-30 19:00:35 400浏览 收藏

积累知识,胜过积蓄金银!毕竟在Golang开发的过程中,会遇到各种各样的问题,往往都是一些细节知识点还没有掌握好而导致的,因此基础知识点的积累是很重要的。下面本文《如何使用mockery来模拟httpclient》,就带大家讲解一下知识点,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~

问题内容

我正在尝试使用 mockery 来模拟 http 客户端,但是当我尝试传递返回值时,出现错误,提示 type http.response is not an expression

下面是我的界面和处理程序

type httpclient interface {
    get(url string) (resp *http.response, err error)
}

type handler struct {
    httpclient   httpclient
}

mockery 生成了一个模拟类,如下所示

type httpclient struct {
    mock.mock
}

// get provides a mock function with given fields: url
func (_m *httpclient) get(url string) (*http.response, error) {
    ret := _m.called(url)

    var r0 *http.response
    if rf, ok := ret.get(0).(func(string) *http.response); ok {
        r0 = rf(url)
    } else {
        if ret.get(0) != nil {
            r0 = ret.get(0).(*http.response)
        }
    }

    var r1 error
    if rf, ok := ret.get(1).(func(string) error); ok {
        r1 = rf(url)
    } else {
        r1 = ret.error(1)
    }

    return r0, r1
}

在我的测试中,我尝试像下面这样模拟 httpclient

httpClient := &mocks.HTTPClient{}
httpClient.On("Get", request.SubscribeURL).Return(resp*http.Response, nil)

我不确定返回时应该使用哪些参数。我应该传递什么?


解决方案


http.response(注意它没有方括号,主要表示类型)是一个表达式,而您应该返回实际响应(函数的返回值),因为函数返回两个值 *http。 response 指向 http 响应结构的指针和 errornil

body := ioutil.NopCloser(strings.NewReader("hello world"))
httpRespose := &http.Response{Body: body, Status: "200 OK", StatusCode: 200}

httpClient.On("Get", request.SubscribeURL)
.Return(
  httpRespose,      // http response with string in the body and the code 200
  nil,              // no error occured while response processed
)

好了,本文到此结束,带大家了解了《如何使用mockery来模拟httpclient》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>