Как макетировать базу данных при тестировании? Golang - PullRequest
0 голосов
/ 25 октября 2019

Я пишу тесты и смог смоделировать базу данных для SQL-запросов с помощью go-sqlmock. Но как я могу тестировать обработчики, то есть заголовки, которые я не могу себе представить? Вот пример:

func (env *EnvironmentUser) GetUserHandler (w http.ResponseWriter, r *http.Request) {
    params := mux.Vars(r)
    id, err := strconv.Atoi(params["id"])
    if err != nil {
        w.WriteHeader(http.StatusNotFound)
        return
    }
    user, err := env.Db.GetUser(int(id))
    if err != nil {
        if err == sql.ErrNoRows {
            w.WriteHeader(http.StatusUnauthorized)
        }
        w.WriteHeader(http.StatusInternalServerError)
        return
    }
    json.NewEncoder(w).Encode(user)
    w.WriteHeader(http.StatusOK)
}

GetUser - листинг:

row := db.QueryRow("SELECT * FROM users WHERE id = $1", id)
    err = row.Scan(&user.Id, &user.Email, &user.Login, &user.Fullname,
        &user.Password, &user.AccVerified)
    if err != nil {
        return models.User{}, err
    }
    return user, nil

Как проверить правильность всех хадеров ??

1 Ответ

0 голосов
/ 25 октября 2019

Ваш вопрос должен быть , как вызвать обработчик и записать ответ . В соответствии с примерами в httptest , вы можете сделать что-то вроде ниже, используя свидетельство

req, err := http.NewRequest(...)
rec := httptest.NewRecorder()
env.GetUserHandler(rec, req)
require.Equal(t, http.StatusOK, rec.Code)
require.Equal(t, "...", rec.Header().Get("..."))

РЕДАКТИРОВАТЬ

Если вы предпочитаете использовать только stdlib, последние две строки становятся

if http.StatusOK != rec.Code {
  t.Errorf(...)
}
if "..." != rec.Header().Get("...") {
  t.Errorf(...)
}
...