如何使用 mockery 模拟 httpclient
How to mock httpclient using mockery
我正在尝试使用 Mockery 来模拟 Http 客户端,但是当我尝试传入 return 值时,我收到一条错误消息 type http.Response is not an expression
下面是我的界面和处理程序
type HTTPClient interface {
Get(url string) (resp *http.Response, err error)
}
type Handler struct {
httpClient HTTPClient
}
Mockery 生成了一个 mock class,如下所示
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)
我不确定我应该在 Return 中使用哪些参数。我应该传递什么?
http.Response
(注意它没有方括号,主要表示类型)是一个表达式,而您应该 return 实际响应(函数的 return 值), 因为一个函数 return 有两个值 *http.Response
一个指向 http 响应结构的指针和一个 error
或 nil
.
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 来模拟 Http 客户端,但是当我尝试传入 return 值时,我收到一条错误消息 type http.Response is not an expression
下面是我的界面和处理程序
type HTTPClient interface {
Get(url string) (resp *http.Response, err error)
}
type Handler struct {
httpClient HTTPClient
}
Mockery 生成了一个 mock class,如下所示
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)
我不确定我应该在 Return 中使用哪些参数。我应该传递什么?
http.Response
(注意它没有方括号,主要表示类型)是一个表达式,而您应该 return 实际响应(函数的 return 值), 因为一个函数 return 有两个值 *http.Response
一个指向 http 响应结构的指针和一个 error
或 nil
.
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
)