Tarkibga o'tish

10. Testlar va benchmark'lar

testing paketi bilan birlik testlari, jadval asosidagi testlar, benchmark'lar va misol (example) funksiyalar yozish. Testlarni go test ./... -v -cover bilan ishga tushiring.

Birlik testlari

1. Abs(x int) int funksiyasi va unga TestAbs testini yozing: musbat, manfiy va nol hollari uchun t.Errorf bilan tekshiring.
Misol: Abs(5) → 5; Abs(-5) → 5; Abs(0) → 0

2. Reverse(s string) string funksiyasi uchun jadval asosidagi test yozing: bo'sh satr, bitta belgi, palindrom va ko'p baytli (UTF-8) belgilar holatlari bilan.
Misol: "" → ""; "a" → "a"; "salom" → "molas"; "ёж" → "жё"

3. Jadval asosidagi testni t.Run bilan qism testlarga ajrating va faqat bitta qism testni -run bayrog'i bilan ishga tushiring.
Misol: go test -run 'TestReverse/palindrom' -v → faqat palindrom qism testi ishlaydi

4. t.Errorf va t.Fatalf farqini ko'rsating: qaysi biri testni darhol to'xtatadi?
Misol: t.Errorf xatoni qayd etib testni davom ettiradi; t.Fatalf testni shu yerning o'zida to'xtatadi

5. Yordamchi funksiya assertEqual(t, got, want) yozing va unda t.Helper() ni chaqiring; xato xabaridagi qator raqami qanday o'zgarishini ko'rsating.
Misol: assertEqual(t, 1, 2) da xato xabari helper ichidagi qatorni emas, chaqiruvchi test qatorini ko'rsatadi

6. Divide funksiyasi uchun xato qaytaradigan holatlarni ham tekshiruvchi test yozing (errors.Is bilan).
Misol: Divide(1, 0) → errors.Is(err, ErrDivByZero) → true

7. Parallel testlar: t.Parallel() bilan bir nechta sekin testni parallel ishga tushirib, umumiy vaqt qisqarishini ko'rsating.
Misol: 3 ta test, har biri 1 s uxlaydi: ketma-ket ≈ 3 s, t.Parallel() bilan ≈ 1 s

8. t.TempDir() yordamida vaqtinchalik katalogda fayl yaratib, fayl bilan ishlovchi funksiyani sinab ko'ring.
Misol: t.TempDir() da a.txt yaratilib, funksiya a.txt mazmunini o'qiydi; test tugagach katalog avtomatik o'chadi

Qaramliklarni almashtirish

9. Joriy vaqtga bog'liq funksiyani (IsWeekend() bool) sinovga yaroqli qiling: vaqtni funksiya parametri yoki interfeys orqali uzating va testda soxta vaqt bering.
Misol: IsWeekend(time.Date(2026, 9, 26, ...)) (shanba) → true; IsWeekend(time.Date(2026, 9, 28, ...)) (dushanba) → false

10. Notifier interfeysiga bog'liq xizmat uchun soxta (fake) amalga oshirish yozing va xizmat to'g'ri xabar yuborganini testda tekshiring.
Misol: FakeNotifier da Notify chaqirilgach msgs → ["buyurtma #1 qabul qilindi"]

11. net/http/httptest yordamida HTTP handler'ni haqiqiy server ishga tushirmasdan sinab ko'ring: holat kodi va javob matnini tekshiring.
Misol: httptest.NewRecorder(), GET /hello?name=Ali → rec.Code → 200, rec.Body.String() → Salom, Ali!

Benchmark va boshqa vositalar

12. Satrlarni birlashtirishning uch usuli (+, strings.Builder, strings.Join) uchun benchmark yozing va -benchmem bilan xotira ajratishlarni solishtiring.
Misol: BenchmarkPlus, BenchmarkBuilder, BenchmarkJoin → -benchmem da + eng ko'p allocs/op ga ega, Builder va Join kam

13. Example funksiyalari yozing (ExampleReverse) va // Output: izohi yordamida ular test sifatida bajarilishini ko'rsating.
Misol: ExampleReverse: fmt.Println(Reverse("salom")) va // Output: molas → go test bu satrni tekshiradi

14. Fuzz test yozing: Reverse(Reverse(s)) == s xossasini testing.F bilan tekshiring va fuzzing topgan xatoni tuzating.
Misol: f.Add("salom"); xato Reverse UTF-8 belgilarni buzsa, fuzz "ёж"-ga o'xshash kirishni topadi va testdata/fuzz ga saqlaydi

15. Kod qamrovini o'lchang (go test -coverprofile), go tool cover -html bilan qamralmagan qatorlarni aniqlang va qamrovni 90% dan oshiring.
Misol: go test -coverprofile=c.out → coverage: 72.0% of statements; testlar qo'shilgach → coverage: 92.0% of statements