GoDasturchi
Unit Testing with Table-Driven Tests

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.

example.go
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.

Hints (0/4)

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

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

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.

example.go
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.

Hints (0/4)

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