Bosh sahifa Wiki Teardown

Teardown

Teardown — test tugagandan keyin setup davomida yaratilgan resurslarni tozalash va o‘zgartirilgan muhitni avvalgi holatiga qaytarish bosqichi. U test muvaffaqiyatli, assertion bilan muvaffaqiyatsiz yoki exception bilan to‘xtaganidan qat’i nazar bajarilishi kerak. To‘g‘ri teardown testlar orasidagi state sizishi va orphan resurslarni oldini oladi.

Tozalanadigan holatlar

Teardown quyidagilarni bajarishi mumkin:

Har resursning lifecycle egasi aniq bo‘ladi. Test yaratmagan shared resursni teardown tasodifan o‘chirmaydi.

Finally semantikasi

Tilning try/finally, context manager yoki framework fixture finalizeri teardownni kafolatlash uchun ishlatiladi. Cleanup callback resurs muvaffaqiyatli yaratilgan zahoti ro‘yxatga olinadi. Setupning keyingi bosqichi yiqilsa ham oldingi resurslar yopiladi.

Process majburan o‘ldirilsa yoki runner crash qilsa in-process teardown ishlamasligi mumkin. Tashqi resursga run ID, owner va expiry/TTL tag beriladi. Alohida janitor job muddati o‘tgan test resurslarini yig‘adi.

Xato boshqaruvi

Test assertioni va teardown bir vaqtda xato qilishi mumkin. Report primary test failureni saqlab, cleanup failureni qo‘shimcha xato sifatida ko‘rsatadi. Teardown exceptioni asl sababni almashtirib yubormasligi kerak. Bir nechta cleanup amali bo‘lsa, birinchisi xato qilganda qolganlari baribir bajariladi.

Xatoni butunlay yutish ham noto‘g‘ri: disk to‘lgan yoki cloud resource o‘chmaganini bilish kerak. Log resurs identifikatori va API javobini saqlaydi, maxfiy credentialni emas.

Database tozalash

Transaction rollback tez, ammo test kodi boshqa connectionda commit qilsa yozuv qoladi. Truncate to‘liq bo‘lishi mumkin, lekin foreign key va parallel testga ta’sir qiladi. Har workerga alohida database yoki schema berish isolationni kuchaytiradi.

Row-by-row delete trigger va audit side effectlarni ishga tushirishi mumkin. Test maqsadiga qarab database snapshotni restore qilish yoki disposable container ishlatiladi. Sequence/identity qiymati ham kerak bo‘lsa reset qilinadi; test aniq IDga keraksiz tayanmasligi kerak.

Async resurslar

Background task va thread to‘xtatilmasdan database tozalansa, ular keyin yana yozuv yaratishi mumkin. Teardown avval producer/workerga stop signal beradi, task tugashini kutadi, keyin storage’ni tozalaydi. Timeoutdan oshgan task diagnostik stack bilan report qilinadi.

Async context manager connection poolni await bilan yopadi. Event loop yopilgandan keyin cleanup chaqirish “loop closed” xatosi beradi, shu sababli teardown tartibi dependency lifecyclega mos.

Idempotent cleanup

Teardown qisman oldin bajarilgan bo‘lsa qayta chaqirish xavfsiz bo‘lishi foydali. “Not found” o‘chirishda muvaffaqiyat sifatida qabul qilinishi mumkin, authorization xatosi esa yashirilmaydi. Noyob prefix bilan resurslarni ro‘yxatlab, faqat shu run obyektlari o‘chiriladi.

Teardown tartibi

Resurslar yaratilgan tartibning teskarisida yopiladi: client, server, database va network. Server database yopilgandan keyin background flush qilsa xato beradi. Dependency graph finalizer tartibini avtomatik belgilashi mumkin. Bir xil scope’dagi fixturelar orasidagi implicit tartibga tayanish o‘rniga dependency ochiq yoziladi.

Signal va majburiy to‘xtatish

Process avval graceful signal oladi va timeout ichida chiqishi kutiladi. U chiqmasa majburan kill qilinadi, stdout/stderr va stack diagnostika uchun saqlanadi. Faqat kill qilish bufferlangan yozuvni yo‘qotishi va portni qisqa vaqt band qoldirishi mumkin.

Fayl tizimi

Windows va Unixda ochiq faylni o‘chirish semantikasi farq qiladi. Test barcha handle’ni yopib, keyin temporary directoryni olib tashlaydi. Symlink bilan recursive delete target tashqarisiga chiqmasligi uchun xavfsiz kutubxona ishlatiladi. Cleanup faqat testga tegishli aniq root ichida bajariladi.

Bog‘liq tushunchalar

Setup, Test fixture, Cleanup, Context manager, Transaction rollback, Temporary resource