Unit Testing with Table-Driven Tests
Table-driven testlar bilan unit testlash
Haqiqiy Go loyihalarida testlar _test.go fayllarda, testing paketi va go test buyrug'i bilan yoziladi. Bu darslar muhitida go testni to'g'ridan-to'g'ri ishga tushirib bo'lmaydi, shuning uchun siz table-driven testing naqshining o'zagini — Go hamjamiyatida eng ko'p ishlatiladigan test uslubini — oddiy main() orqali qo'lda takrorlaysiz.
tests := []struct {
name string
a, b int
want int
}{
{"positive numbers", 2, 3, 5},
{"negative and positive", -1, 1, 0},
}
for _, tt := range tests {
got := Add(tt.a, tt.b)
status := "PASS"
if got != tt.want {
status = "FAIL"
}
fmt.Printf("[%s] %s: got %d, want %d\n", status, tt.name, got, tt.want)
}G'oya sodda: har bir test holatini alohida funksiya yozish o'rniga, barcha holatlarni (kiruvchi qiymatlar + kutilgan natija) bitta slice'ga jamlaysiz, so'ngra ularning barchasi ustidan bitta tsikl bilan aylanasiz. Bu — YAML Data Pipeline kursidagi "ma'lumot va mantiqni ajratish" g'oyasining test yozishga qo'llanilishi: yangi holatni tekshirish uchun yangi kod emas, faqat slice'ga yangi qator qo'shasiz. Haqiqiy loyihada bu tsikl testing.T va t.Run(tt.name, func(t *testing.T) {...}) ichida bo'lardi, lekin tuzilma aynan shu.
>_ Exercise
Add(a, b int) int funksiyasi berilgan. mainda uch xil holatni sinaydigan table-driven test yozing: har bir holat nomi, ikkita kiruvchi son va kutilgan natijadan iborat bo'lsin. Barcha holatlar ustidan aylanib, har biri uchun "[PASS] <nom>: got <natija>, want <kutilgan>" (yoki mos kelmasa [FAIL]) shaklida chop eting.
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
Table-driven testing — test holatlarini (kirish + kutilgan natija) ma'lumot sifatida slice'da saqlab, bitta umumiy tsikl bilan tekshirish naqshi. Bu Go'da testlarni qisqa, takrorlanmaydigan va yangi holat qo'shishni oson qiladi.
NEXT UP
HTTP Handlers and Routing
$ go run main.go
Kodingizni ishga tushiring