Bosh sahifa Wiki Exception testing

Exception testing

Exception testing — dastur noto‘g‘ri kirish, mavjud bo‘lmagan resurs yoki tashqi xizmat xatosiga duch kelganda kutilgan exceptionni yaratishi va uni to‘g‘ri qayta ishlashini tekshirish usulidir. Bunday test faqat xato sodir bo‘lishini emas, exception turi, mazmuni, yon ta’sirlar va resurslarning tozalanishini ham baholaydi.

Kutilgan xatoni tekshirish

Test aniq exception turini kutishi kerak. Juda keng Exception yoki Throwable turini qabul qilish kodning boshqa joyida yuz bergan xatoni ham muvaffaqiyat deb ko‘rsatishi mumkin. Python misolida:

def test_rejects_negative_amount():
    with pytest.raises(ValueError, match="amount"):
        transfer(amount=-10)

Bu test ValueError chiqishini va xabarda amount bo‘lishini tekshiradi. Xabar butunlay belgiga tenglashtirilsa tinish belgisi kabi ahamiyatsiz o‘zgarish testni buzadi. Barqaror contract exception type, error code yoki strukturali attribute orqali ifodalanadi.

Xato paydo bo‘ladigan chegara

Exception aynan qaysi amal vaqtida chiqishi muhim. Setup ham kutish blokiga kiritilsa, noto‘g‘ri fixture xatosi asosiy testni aldashi mumkin. Shu sabab faqat tekshiriladigan chaqiruv exception contextiga joylanadi. Bir necha amal bajarilsa, ularning har biri alohida test qilinadi.

Validation exceptioni odatda tashqi side effectdan oldin chiqishi kerak. Masalan, noto‘g‘ri summa databasega yozuv kiritmasligi va payment gatewayga murojaat qilmasligi tekshiriladi. Transaction ichidagi xato rollbackni, fayl operatsiyasidagi xato esa vaqtinchalik fayl yopilganini talab qiladi.

Cause va exception zanjiri

Past qatlam xatosi yuqori qatlamda domain exceptionga aylantirilishi mumkin. Bunda original sabab cause sifatida saqlansa diagnostika yo‘qolmaydi. Test tashqi API timeouti OrderUnavailablega aylanishini, lekin autentifikatsiya xatosi boshqa turda qolishini tekshiradi. Har xatoni bir xil umumiy exceptionga o‘rash foydali signalni yo‘qotadi.

Exception ichidagi maxfiy ma’lumot ham sinovdan o‘tkaziladi. SQL, token yoki foydalanuvchining to‘liq shaxsiy ma’lumoti clientga yuborilmasligi kerak. Ichki log correlation ID va xavfsiz texnik tafsilotni saqlashi, public javob esa barqaror error code berishi mumkin.

Asinxron va parallel kod

Async funksiyaning exceptioni coroutine await qilinganda ko‘rinadi. Faqat coroutine obyektini yaratish testni bajarmaydi. Background task xatosi callerga uzatilmasa, event loop warningi yoki monitoring hooki orqali qayd etilishi tekshiriladi. Timeout va cancellation alohida holatlar bo‘lib, oddiy biznes exceptioni bilan aralashtirilmaydi.

Parallel amallarda birinchi xato sibling tasklarni bekor qilishi yoki qolgan natijalar bilan birga yig‘ilishi mumkin. Test frameworkning task group semantikasiga mos ravishda exception group, cancellation va cleanup tartibini tekshiradi.

Failure injection

Kam uchraydigan xatolar dependency orqali sun’iy yaratiladi: disk yozuvi rad etiladi, network client timeout qaytaradi yoki serializer buzilgan input oladi. Injection interface chegarasida bajarilsa test implementation detallarga bog‘lanmaydi. Real diskni to‘ldirish yoki production xizmatini uzish o‘rniga boshqariladigan fake ishlatiladi.

Exception chiqmaydigan muvaffaqiyat yo‘li ham alohida test qilinadi. Aks holda har doim xato beradigan funksiya barcha negative testlardan o‘tishi mumkin. Boundary qiymatlar parametrization bilan qamrab olinadi, biroq har case nomi kutilgan sababni aniq ko‘rsatadi.

Log va protocol javobi

Web qatlamida domain exception HTTP status va strukturali error javobiga mapping qilinadi. Test validation uchun 400, authentication uchun 401 va conflict uchun 409 kabi application contractini tekshiradi; ichki stack trace javobga chiqmasligi ham tasdiqlanadi. Log yozuvi aynan bir marta yaratilishi muhim: bir exception har qatlamda qayta loglansa monitoringda bitta hodisa ko‘p xatodek ko‘rinadi. Correlation ID client javobi va ichki logni bog‘laydi.

Bog‘liq tushunchalar

Exception handling, Negative testing, Assertion, Failure injection, Rollback, Async testing, Error code