GoDasturchi
Testing HTTP Handlers

Testing HTTP Handlers

HTTP handler'larni testlash

Kursning yakuniy darsida siz ikkita g'oyani birlashtirasiz: Unit Testing darsidagi table-driven test naqshi va shu kursda o'rgangan httptest vositalari. Natija — HTTP handler'larni sinashning to'liq, real loyihalarda ishlatiladigan usuli.

example.go
tests := []struct {
    name       string
    query      string
    wantStatus int
    wantBody   string
}{
    {"with name", "?name=Aziz", http.StatusOK, "Salom, Aziz!"},
    {"missing name", "", http.StatusBadRequest, "name is required"},
}

for _, tt := range tests {
    req := httptest.NewRequest(http.MethodGet, "/greet"+tt.query, nil)
    rec := httptest.NewRecorder()
    GreetHandler(rec, req)
    // ... natijani solishtirish ...
}

Har bir test holati — nafaqat kiruvchi qiymat va kutilgan natija, balki butun bir HTTP so'rov stsenariysi: qanday so'rov yuborilyapti va handler qanday javob berishi kerak. Bu naqsh HTTP Handlers and Routing darsidagi marshrutlashni ham, Panic Recovery darsidagi xato holatlarini ham bir xil, izchil tarzda sinash imkonini beradi.

>_ Exercise

GreetHandler(w http.ResponseWriter, r *http.Request) funksiyasini yozing: name so'rov parametrini o'qiydi, bo'sh bo'lsa http.Error bilan 400 va "name is required" qaytaradi, aks holda "Salom, <name>!" yozadi. mainda ikkita holatni (name bor va yo'q) table-driven uslubda sinab, har biri uchun "[PASS/FAIL] <nom>: status=<kod> body=<tana>" chop eting (javob tanasidagi oxirgi yangi qatorni solishtirishdan oldin olib tashlang).

Stuck? Reveal a hint to help you.

Hints (0/4)

Key Takeaway

Key Takeaway:

HTTP handler'larni table-driven uslubda sinash — har bir test holatini "qanday so'rov" va "qanday javob kutilyapti" juftligi sifatida ifodalab, httptest orqali haqiqiy so'rov/javob aylanishini tekshirish. Bu — ushbu kursda o'rgangan barcha naqshlarning (handler'lar, JSON, table-driven testlar) birlashgan yakuniy shakli.

Finish
OUTPUT

$ go run main.go
Kodingizni ishga tushiring

Testing HTTP Handlers

HTTP handler'larni testlash

Kursning yakuniy darsida siz ikkita g'oyani birlashtirasiz: Unit Testing darsidagi table-driven test naqshi va shu kursda o'rgangan httptest vositalari. Natija — HTTP handler'larni sinashning to'liq, real loyihalarda ishlatiladigan usuli.

example.go
tests := []struct {
    name       string
    query      string
    wantStatus int
    wantBody   string
}{
    {"with name", "?name=Aziz", http.StatusOK, "Salom, Aziz!"},
    {"missing name", "", http.StatusBadRequest, "name is required"},
}

for _, tt := range tests {
    req := httptest.NewRequest(http.MethodGet, "/greet"+tt.query, nil)
    rec := httptest.NewRecorder()
    GreetHandler(rec, req)
    // ... natijani solishtirish ...
}

Har bir test holati — nafaqat kiruvchi qiymat va kutilgan natija, balki butun bir HTTP so'rov stsenariysi: qanday so'rov yuborilyapti va handler qanday javob berishi kerak. Bu naqsh HTTP Handlers and Routing darsidagi marshrutlashni ham, Panic Recovery darsidagi xato holatlarini ham bir xil, izchil tarzda sinash imkonini beradi.

>_ Exercise

GreetHandler(w http.ResponseWriter, r *http.Request) funksiyasini yozing: name so'rov parametrini o'qiydi, bo'sh bo'lsa http.Error bilan 400 va "name is required" qaytaradi, aks holda "Salom, <name>!" yozadi. mainda ikkita holatni (name bor va yo'q) table-driven uslubda sinab, har biri uchun "[PASS/FAIL] <nom>: status=<kod> body=<tana>" chop eting (javob tanasidagi oxirgi yangi qatorni solishtirishdan oldin olib tashlang).

Stuck? Reveal a hint to help you.

Hints (0/4)

Key Takeaway

Key Takeaway:

HTTP handler'larni table-driven uslubda sinash — har bir test holatini "qanday so'rov" va "qanday javob kutilyapti" juftligi sifatida ifodalab, httptest orqali haqiqiy so'rov/javob aylanishini tekshirish. Bu — ushbu kursda o'rgangan barcha naqshlarning (handler'lar, JSON, table-driven testlar) birlashgan yakuniy shakli.