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.
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.
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
$ go run main.go
Kodingizni ishga tushiring