GoDasturchi
Table-Driven Tests

Table-Driven Tests

Jadval asosidagi testlar (qaytadan)

"Professional Go Testing" kursida jadval asosidagi testlarni chuqur ko'rgan edingiz. Bu qisqa darsda esa, ularni shu kursda ko'rgan naqshlarning birortasini sinash uchun to'g'ridan-to'g'ri qo'llab, ikki g'oyani birlashtiramiz: Strategy naqshini (chegirma hisoblash) jadval orqali sinaymiz.

example.go
package main

import "testing"

type DiscountStrategy interface {
	Apply(price float64) float64
}

type PercentDiscount struct{ Percent float64 }

func (p PercentDiscount) Apply(price float64) float64 {
	return price * (1 - p.Percent/100)
}

func TestPercentDiscount(t *testing.T) {
	tests := []struct {
		name    string
		percent float64
		price   float64
		want    float64
	}{
		{"10 foiz", 10, 100, 90},
		{"50 foiz", 50, 200, 100},
		{"chegirmasiz", 0, 100, 100},
	}
	for _, tc := range tests {
		t.Run(tc.name, func(t *testing.T) {
			s := PercentDiscount{Percent: tc.percent}
			got := s.Apply(tc.price)
			if got != tc.want {
				t.Errorf("Apply(%.0f) = %.2f, kutilgan %.2f", tc.price, got, tc.want)
			}
		})
	}
}

Bu — allaqachon tanish naqsh, faqat endi u dizayn naqshi (Strategy) bilan birlashtirilgan holda ko'rsatilmoqda: jadvaldagi har bir qator turli xil chegirma stsenariysini ifodalaydi, va bitta test funksiyasi ularning barchasini bir xil kodda tekshiradi. Bu — real loyihalarda naqshlarni sinashning aynan qanday ko'rinishda bo'lishini ko'rsatadi.

E'tibor bering: bu darsda ham, oldingi "Professional Go Testing" kursidagidek, kodingiz Go Playground'da haqiqiy go test sifatida ishga tushiriladi — chiqishda === RUN va --- PASS qatorlarini ko'rasiz.

>_ Exercise

FixedDiscount strategiyasi uchun jadval asosidagi test yozing.

  • FixedDiscount struct'i (Amount float64) va Apply metodini yozing (price - Amount, manfiy bo'lsa 0)
  • TestFixedDiscount funksiyasida kamida ikkita holatni (oddiy va manfiyga aylanadigan) jadval bilan tekshiring

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

Dizayn naqshlari (masalan Strategy)ni sinashda ham jadval asosidagi testlar juda qulay — har bir qator bitta stsenariyni ifodalaydi, bitta test funksiyasi esa ularning barchasini tekshiradi.

NEXT UP

Object Pooling with sync.Pool

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

Table-Driven Tests

Jadval asosidagi testlar (qaytadan)

"Professional Go Testing" kursida jadval asosidagi testlarni chuqur ko'rgan edingiz. Bu qisqa darsda esa, ularni shu kursda ko'rgan naqshlarning birortasini sinash uchun to'g'ridan-to'g'ri qo'llab, ikki g'oyani birlashtiramiz: Strategy naqshini (chegirma hisoblash) jadval orqali sinaymiz.

example.go
package main

import "testing"

type DiscountStrategy interface {
	Apply(price float64) float64
}

type PercentDiscount struct{ Percent float64 }

func (p PercentDiscount) Apply(price float64) float64 {
	return price * (1 - p.Percent/100)
}

func TestPercentDiscount(t *testing.T) {
	tests := []struct {
		name    string
		percent float64
		price   float64
		want    float64
	}{
		{"10 foiz", 10, 100, 90},
		{"50 foiz", 50, 200, 100},
		{"chegirmasiz", 0, 100, 100},
	}
	for _, tc := range tests {
		t.Run(tc.name, func(t *testing.T) {
			s := PercentDiscount{Percent: tc.percent}
			got := s.Apply(tc.price)
			if got != tc.want {
				t.Errorf("Apply(%.0f) = %.2f, kutilgan %.2f", tc.price, got, tc.want)
			}
		})
	}
}

Bu — allaqachon tanish naqsh, faqat endi u dizayn naqshi (Strategy) bilan birlashtirilgan holda ko'rsatilmoqda: jadvaldagi har bir qator turli xil chegirma stsenariysini ifodalaydi, va bitta test funksiyasi ularning barchasini bir xil kodda tekshiradi. Bu — real loyihalarda naqshlarni sinashning aynan qanday ko'rinishda bo'lishini ko'rsatadi.

E'tibor bering: bu darsda ham, oldingi "Professional Go Testing" kursidagidek, kodingiz Go Playground'da haqiqiy go test sifatida ishga tushiriladi — chiqishda === RUN va --- PASS qatorlarini ko'rasiz.

>_ Exercise

FixedDiscount strategiyasi uchun jadval asosidagi test yozing.

  • FixedDiscount struct'i (Amount float64) va Apply metodini yozing (price - Amount, manfiy bo'lsa 0)
  • TestFixedDiscount funksiyasida kamida ikkita holatni (oddiy va manfiyga aylanadigan) jadval bilan tekshiring

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

Dizayn naqshlari (masalan Strategy)ni sinashda ham jadval asosidagi testlar juda qulay — har bir qator bitta stsenariyni ifodalaydi, bitta test funksiyasi esa ularning barchasini tekshiradi.

NEXT UP

Object Pooling with sync.Pool