GoDasturchi
Test Fixtures and Helpers

Test Fixtures and Helpers

Test fixture'lari va yordamchilari

Ko'p testlar bir xil "boshlang'ich holat"ni talab qiladi (masalan tayyor obyekt). Buni har bir testda qaytadan yozish o'rniga, yordamchi funksiya ("fixture") yozib, uni qayta ishlatish mumkin.

example.go
package main

import "testing"

type Wallet struct {
	Balance int
}

func (w *Wallet) Deposit(amount int) {
	w.Balance += amount
}

func newTestWallet(t *testing.T) *Wallet {
	t.Helper()
	w := &Wallet{Balance: 100}
	t.Cleanup(func() {
		w.Balance = 0
	})
	return w
}

func TestWalletDeposit(t *testing.T) {
	w := newTestWallet(t)
	w.Deposit(50)
	if w.Balance != 150 {
		t.Errorf("Balance = %d, kutilgan 150", w.Balance)
	}
}

t.Helper() — bu funksiya yordamchi ekanini bildiradi, shuning uchun xato yuz bersa, Go xato qatorini yordamchi funksiya ichidan emas, uni chaqirgan test ichidan ko'rsatadi (aniqroq xabar uchun). t.Cleanup(funksiya) esa test tugagach (muvaffaqiyatli yoki muvaffaqiyatsiz — farqi yo'q) avtomatik bajariladigan "tozalash" ishini belgilaydi — masalan vaqtinchalik faylni o'chirish yoki holatni asl holiga qaytarish.

>_ Exercise

Counter uchun fixture yordamchisi yozing.

  • newTestCounter(t) yordamchisini yozing: t.Helper() chaqirsin, value=10 bilan Counter qaytarsin
  • TestCounterReset: fixture'dan foydalanib, Reset() dan keyin value 0 ekanini tekshiring

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

Yordamchi ("fixture") funksiyalar takrorlanuvchi tayyorgarlik kodini bir joyga yig'adi; t.Helper() va t.Cleanup() ularni testlash bilan yaxshi integratsiya qiladi.

NEXT UP

Testing HTTP Handlers

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

Test Fixtures and Helpers

Test fixture'lari va yordamchilari

Ko'p testlar bir xil "boshlang'ich holat"ni talab qiladi (masalan tayyor obyekt). Buni har bir testda qaytadan yozish o'rniga, yordamchi funksiya ("fixture") yozib, uni qayta ishlatish mumkin.

example.go
package main

import "testing"

type Wallet struct {
	Balance int
}

func (w *Wallet) Deposit(amount int) {
	w.Balance += amount
}

func newTestWallet(t *testing.T) *Wallet {
	t.Helper()
	w := &Wallet{Balance: 100}
	t.Cleanup(func() {
		w.Balance = 0
	})
	return w
}

func TestWalletDeposit(t *testing.T) {
	w := newTestWallet(t)
	w.Deposit(50)
	if w.Balance != 150 {
		t.Errorf("Balance = %d, kutilgan 150", w.Balance)
	}
}

t.Helper() — bu funksiya yordamchi ekanini bildiradi, shuning uchun xato yuz bersa, Go xato qatorini yordamchi funksiya ichidan emas, uni chaqirgan test ichidan ko'rsatadi (aniqroq xabar uchun). t.Cleanup(funksiya) esa test tugagach (muvaffaqiyatli yoki muvaffaqiyatsiz — farqi yo'q) avtomatik bajariladigan "tozalash" ishini belgilaydi — masalan vaqtinchalik faylni o'chirish yoki holatni asl holiga qaytarish.

>_ Exercise

Counter uchun fixture yordamchisi yozing.

  • newTestCounter(t) yordamchisini yozing: t.Helper() chaqirsin, value=10 bilan Counter qaytarsin
  • TestCounterReset: fixture'dan foydalanib, Reset() dan keyin value 0 ekanini tekshiring

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

Yordamchi ("fixture") funksiyalar takrorlanuvchi tayyorgarlik kodini bir joyga yig'adi; t.Helper() va t.Cleanup() ularni testlash bilan yaxshi integratsiya qiladi.

NEXT UP

Testing HTTP Handlers