Golang - Тестирование HTTP-запроса в методе - PullRequest
0 голосов
/ 28 марта 2019

Я немного растерялся, когда дело доходит до тестирования в Go.Я читал, что в некоторых случаях абстрагирование от интерфейсов должно быть идеальным способом, в других - я вижу TestTables.Я не слишком уверен, когда применять любой из них.Например, как можно протестировать приведенную ниже функцию.

type User{
    Name string           `json:"name"`
    IsMarried bool        `json:"isMarried"`
    Nicknames []string    `json:"nicknames"`
}

func (u *User) Create() (*http.Response, error) {
    data, err := json.Marshal(u)
    if err != nil {
        return nil, err
    }
    urll := EndpointBase+"/users"

    req, err := http.NewRequest(http.MethodPost, urll,  bytes.NewReader(data))
    if err != nil {
        return nil, err
    }

    resp, err := auth.Session.Client.Do(req)
    if err != nil {
        return nil, err
    }
    return resp, nil
}

1 Ответ

2 голосов
/ 28 марта 2019

Абстракция к интерфейсам и тесты на основе таблиц - это несвязанные понятия, которые обычно оба используются.

Вы должны абстрагироваться от интерфейсов для ваших зависимостей, чтобы вы могли смоделировать / заглушить их по мере необходимости (в данном случае вашзависимости - это то, что вы вызываете с помощью HTTP, какой бы аутентификацией ни была глобальная EndpointBase).

Табличные тесты позволяют более эффективно писать несколько тестов с меньшим количеством повторяющегося кода в тесте.

Я бы сказал, что модульное тестирование этой функции не будет иметь большого значения, потому что это такая тонкая оболочка вокруг HTTP-вызова.Интеграционный тест был бы более полезен, и в этом случае абстракция к интерфейсам не помогла бы с тестированием (хотя в любом случае это могло бы быть хорошим дизайнерским решением).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...