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.
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.
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.
$ go run main.go
Kodingizni ishga tushiring