GoDasturchi
Table-Driven Tests

Table-Driven Tests

Jadval asosidagi testlar

Bitta funksiyani ko'p xil holatlarda sinash kerak bo'lsa, har biriga alohida test yozish o'rniga — barcha holatlarni bitta "jadval" (slice) qilib, ustidan bitta sikl bilan yuriladi. Bu Go'dagi eng ko'p ishlatiladigan test naqshi.

example.go
package main

import "testing"

func IsEven(n int) bool {
	return n%2 == 0
}

func TestIsEven(t *testing.T) {
	tests := []struct {
		name string
		in   int
		want bool
	}{
		{"juft", 4, true},
		{"toq", 7, false},
		{"nol", 0, true},
	}
	for _, tc := range tests {
		t.Run(tc.name, func(t *testing.T) {
			got := IsEven(tc.in)
			if got != tc.want {
				t.Errorf("IsEven(%d) = %v, kutilgan %v", tc.in, got, tc.want)
			}
		})
	}
}

tests := []struct{...}{...} — har biri bitta holatni ifodalovchi anonim struct'lar slice'i ("jadval"). t.Run(nom, funksiya) esa har bir holatni alohida kichik test (subtest) sifatida ishga tushiradi — shuning uchun chiqishda TestIsEven/juft, TestIsEven/toq kabi alohida qatorlarni ko'rasiz. Yangi holat qo'shish uchun endi yangi funksiya yozish shart emas — jadvalga bitta qator qo'shish kifoya.

>_ Exercise

Abs funksiyasini jadval asosida sinang.

  • "ijobiy", "manfiy", "nol" holatlari uchun jadval yarating
  • t.Run bilan har birini alohida subtest sifatida tekshiring

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

Jadval asosidagi testlar (table-driven tests) — ko'p holatni bitta test funksiyasida, t.Run orqali toza va kengaytiriladigan qilib tekshirishning Go'dagi standart usuli.

NEXT UP

Subtests and Parallel Testing

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

Table-Driven Tests

Jadval asosidagi testlar

Bitta funksiyani ko'p xil holatlarda sinash kerak bo'lsa, har biriga alohida test yozish o'rniga — barcha holatlarni bitta "jadval" (slice) qilib, ustidan bitta sikl bilan yuriladi. Bu Go'dagi eng ko'p ishlatiladigan test naqshi.

example.go
package main

import "testing"

func IsEven(n int) bool {
	return n%2 == 0
}

func TestIsEven(t *testing.T) {
	tests := []struct {
		name string
		in   int
		want bool
	}{
		{"juft", 4, true},
		{"toq", 7, false},
		{"nol", 0, true},
	}
	for _, tc := range tests {
		t.Run(tc.name, func(t *testing.T) {
			got := IsEven(tc.in)
			if got != tc.want {
				t.Errorf("IsEven(%d) = %v, kutilgan %v", tc.in, got, tc.want)
			}
		})
	}
}

tests := []struct{...}{...} — har biri bitta holatni ifodalovchi anonim struct'lar slice'i ("jadval"). t.Run(nom, funksiya) esa har bir holatni alohida kichik test (subtest) sifatida ishga tushiradi — shuning uchun chiqishda TestIsEven/juft, TestIsEven/toq kabi alohida qatorlarni ko'rasiz. Yangi holat qo'shish uchun endi yangi funksiya yozish shart emas — jadvalga bitta qator qo'shish kifoya.

>_ Exercise

Abs funksiyasini jadval asosida sinang.

  • "ijobiy", "manfiy", "nol" holatlari uchun jadval yarating
  • t.Run bilan har birini alohida subtest sifatida tekshiring

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

Jadval asosidagi testlar (table-driven tests) — ko'p holatni bitta test funksiyasida, t.Run orqali toza va kengaytiriladigan qilib tekshirishning Go'dagi standart usuli.

NEXT UP

Subtests and Parallel Testing