Sobes.tech
Senior
28

How do you usually test HTTP handlers in Go?

Компании, где спрашивали
AndersenAndersen

Ответ от нейросети

sobes.tech AI

Для тестирования HTTP-хендлеров в Go обычно используют пакет net/http/httptest, который позволяет создавать тестовые HTTP-запросы и записывать ответы.

Пример простого теста хендлера:

func TestMyHandler(t *testing.T) {
    req := httptest.NewRequest("GET", "/path", nil)
    w := httptest.NewRecorder()

    MyHandler(w, req)

    res := w.Result()
    defer res.Body.Close()

    if res.StatusCode != http.StatusOK {
        t.Errorf("expected status 200 OK, got %d", res.StatusCode)
    }

    body, _ := io.ReadAll(res.Body)
    expected := "Hello, world!"
    if string(body) != expected {
        t.Errorf("unexpected body: got %q, want %q", string(body), expected)
    }
}

Такой подход позволяет изолированно проверить логику хендлера без запуска полноценного сервера. Можно создавать разные запросы с нужными параметрами, заголовками и телом, а затем проверять статус, заголовки и тело ответа.