Setup — test bajarilishidan oldin uning boshlang‘ich sharoitini tayyorlash bosqichi. Unda obyektlar yaratiladi, dependencylar sozlanadi, ma’lumotlar bazasiga fixture yoziladi yoki vaqtinchalik resurs ishga tushiriladi. Setup test natijasining bir xil sharoitda takrorlanishini ta’minlaydi, lekin testning asosiy Act qismi bilan aralashmasligi kerak.
Darajalar
Test frameworklar setupni turli scope’da bajaradi:
- har testdan oldingi setup kuchli isolation beradi;
- class yoki module setup qimmat read-only resursni bo‘lishadi;
- session setup butun test run uchun server yoki container ochadi;
- suite setup global konfiguratsiyani tayyorlaydi.
Scope kattalashsa setup vaqti kamayadi, ammo state testlar orasida sizishi mumkin. Shared resurs immutable yoki har test namespace/transaction bilan ajratiladi.
Arrange bilan munosabati
Arrange test ichidagi scenario-specific tayyorgarlik, setup hook esa takrorlanuvchi umumiy infratuzilma bo‘lishi mumkin. Barcha inputni yashirin beforeEach ichiga qo‘yish testni o‘qishni qiyinlashtiradi. O‘quvchi test tanasidan qaysi user yoki holat ishlatilganini ko‘ra olishi kerak.
Default fixture valid minimal obyekt beradi, test muhim fieldni aniq o‘zgartiradi. Builder yoki factory uzoq constructorlarni ixcham qiladi. Magic global qiymatlar o‘rniga ma’noli nomlar ishlatiladi.
Setup xatosi
Setup yiqilsa testning o‘zi bajarilmagan. Report buni assertion failuredan ajratadi. Bir global setup xatosi yuzlab testni “failed” qilib ko‘rsatish o‘rniga blocked/error sifatida belgilanishi mumkin. Asl exception va resurs loglari saqlanadi.
Setup bir necha bosqichdan iborat bo‘lsa, uchinchi bosqich xato qilganda dastlabki ikki resurs tozalanadi. Exit stack yoki cleanup callbacklar resurs yaratilishi bilan ro‘yxatga olinadi. Faqat setup oxirida bitta teardown ro‘yxatlash orphan qoldiradi.
Tashqi xizmatlar
Integration test setup container, schema migration va health checkni bajarishi mumkin. Faqat port ochilishi service tayyorligini anglatmaydi; readiness endpoint yoki real minimal query kutiladi. Qat’iy sleep(10) tez hostda vaqtni isrof, sekin hostda yetarsiz bo‘lishi mumkin.
Test parallel ishlasa port, database nomi va queue topic noyob bo‘ladi. Random port OSdan olinib, actual qiymat test clientga uzatiladi. Shared external sandboxda har run tenant yoki prefix bilan ajratiladi.
Deterministik vaqt
Setup clockni aniq vaqtga o‘rnatishi, random seedni saqlashi va locale/timezone’ni belgilashi mumkin. Aks holda test faqat oy oxiri, DST yoki ma’lum hostda yiqiladi. Environment o‘zgartirilsa teardown’da oldingi qiymat tiklanadi.
Performance
Setup test vaqtidan katta bo‘lsa, suite sekinlashadi. Profiling qaysi fixture qimmatligini ko‘rsatadi. Safe bo‘lsa immutable snapshot, database template yoki session container qayta ishlatiladi. Tezlik uchun isolation qurbon qilinsa flaky testlar paydo bo‘lishi mumkin.
Patch va monkeypatch
Setup modul globali, environment yoki funksiya nomini vaqtincha patch qilishi mumkin. Patch obyekt e’lon qilingan joyda emas, system under test uni qaysi namespace’dan o‘qisa o‘sha joyda qo‘llanadi. Framework eski qiymatni avtomatik tiklasa ham scope tekshiriladi. Parallel test process globalini bir vaqtda turlicha patch qilsa poyga yuz beradi.
Network setup
Fake server avval loopbackda random port tinglaydi, keyin client base URL shu portga beriladi. Server readiness signal bermasdan test boshlansa connection refused flaky xato bo‘ladi. TLS testi uchun vaqtinchalik CA va sertifikat yaratiladi, client trust store faqat shu test scope’da o‘zgartiriladi.
Minimal setup
Har testga butun application context yuklash unit testni integration testga aylantiradi. Faqat kerakli unit va dependency yaratiladi. Framework contexti zarur bo‘lsa, sekin test marker bilan ajratiladi va parallelizm strategiyasi alohida bo‘ladi.
Cleanupni oldindan ro‘yxatlash
Cloud resource yaratish chaqiruvi muvaffaqiyatli javob bergach uning IDsi darhol cleanup stackka qo‘shiladi. Keyingi assertion yoki setup xatosi resursni orphan qoldirmaydi. API javobi noaniq timeout bo‘lsa, idempotency key yoki run tag orqali yaratilgan resurs qidiriladi.
Bog‘liq tushunchalar
Teardown, Test fixture, Arrange-Act-Assert, BeforeEach, Test isolation, Readiness check