Как издеваться над httpclient с помощью издевательства - PullRequest
2 голосов
/ 24 января 2020

Я пытаюсь использовать 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)

Я не уверен, что Параметры, которые я должен вернуть. Что я должен проходить?

1 Ответ

3 голосов
/ 24 января 2020

http.Response (обратите внимание, что это без квадратных скобок, он в основном обозначает тип) является выражением, в то время как вы должны вернуть фактический ответ (возвращаемое значение функции), так как функция возвращает два значения *http.Response a указатель на структуру ответа 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
)
...