Как смоделировать тест с `fun c (w http.ResponseWriter, r * http.Request)` - PullRequest
0 голосов
/ 14 февраля 2020

У меня проблема, когда я хочу получить ответное тело из моего макета, в настоящее время у меня есть такой макет:

func (m *MockCarService) GetCar(ctx context.Context, store store.Store, IDCar uint) (interface{}, error) {

    call := m.Called(ctx, store)
    res := call.Get(0)
    if res == nil {
        return nil, call.Error(1)
    }
    return res.(*models.Cars), call.Error(1)
}

Затем я создаю handler_test. go вот так:

func TestGetCar(t *testing.T) {

    var store store.Store

    car := &models.Cars{
        ID:          12345,
        BrandID:     1,
        Name:        "Car abc",
        Budget:      2000,
        CostPerMile: 4000,
        KpiReach:    6000,
    }

    mockService := func() *service.MockCarService {
        svc := &service.MockCarService{}
        svc.On("GetCar", context.Background(), car.ID).Return(car, nil)
        return svc
    }

    handlerGet := NewCarHandler(mockService())
    actualResponse := handlerGet.GetCar(store) 

    expected := `{"success":true,"data":[],"errors":[]}` 
    assert.Equal(t, expected+"\n", actualResponse)
}

Что я получил, так это какая-то ошибка (http.HandlerFun c) (0x165e020) (не могу принять c тип в качестве аргумента)

Понятия не имею как это исправить. Так как я использую обработчик, как это:

func (ah *CampaignHandler) GetCampaigns(store store.Store) func(w http.ResponseWriter, r *http.Request) {
    return func(w http.ResponseWriter, r *http.Request) {  .....

1 Ответ

0 голосов
/ 15 февраля 2020

Если вы делаете HTTP-вызов внешней службе и wi sh, чтобы проверить это и получить ложный ответ, вы можете использовать httptest

http пакет в go поставляется с httptest для тестирования всех ваших Зависимости внешних вызовов HTTP.

Пожалуйста, найдите пример здесь: https://golang.org/src/net/http/httptest/example_test.go

Если это не ваш вариант использования, лучше использовать заглушки и способ сделать это можно найти здесь : https://dev.to/jonfriesen/mocking-dependencies-in-go-1h4d

По сути, это означает, что нужно использовать интерфейс и иметь собственные вызовы функций struct и stubbed, которые будут возвращать желаемый ответ.

Если вы Если вы хотите добавить к своим тестам немного сахара syntacti c, вы можете использовать свидетельство: https://github.com/stretchr/testify

Надеюсь, это поможет.

...