Soft assertion — birinchi assertion failure’da testni darhol to‘xtatmay, bir nechta mustaqil tekshiruv natijasini yig‘ib, test oxirida bitta jamlangan failure reporti chiqaradigan usul. U katta obyekt, UI sahifa yoki bir nechta bog‘liq bo‘lmagan maydonlarni bir bajarilishda tekshirganda ko‘proq diagnostika beradi.
Hard assertion bilan ishlashi
Oddiy hard assertion bajarilmasa keyingi kod ishlamaydi. Bu prerequisite uchun to‘g‘ri: response mavjud bo‘lmasa uning maydonlarini tekshirish ma’nosiz. Soft assertion esa bir-biridan mustaqil fieldlar uchun foydali.
hard: response status 200 ekanini tekshir
soft: title, price va currency qiymatlarini tekshir
soft: image URL formatini tekshir
assert_all: yig‘ilgan farqlarni chiqar
Status 500 bo‘lsa hard assertion testni to‘xtatadi. Status to‘g‘ri, ammo uchta field xato bo‘lsa barchasi bir reportda ko‘rinadi.
Yig‘ish mexanizmi
Soft assertion context har failure’ni message va stack location bilan collectionga qo‘shadi. Tekshiruvlar davom etadi. Scope tugaganda yoki assertAll chaqirilganda collection bo‘sh bo‘lmasa aggregate exception tashlanadi.
assertAll chaqirilishini unutish barcha xatolarni jim o‘tkazishi mumkin. Shu sabab context manager yoki framework lifecycle hook avtomatik finalization beradi. Har test uchun collector alohida bo‘lishi, parallel testlar global ro‘yxatni bo‘lishmasligi kerak.
Mos holatlar
| Holat | Soft assertion foydasi |
|---|---|
| DTO fieldlari | Bitta run’da barcha farq ko‘rinadi |
| UI tekshiruvi | Bir sahifadagi mustaqil elementlar |
| Migration audit | Ko‘p record qoidalarini jamlash |
| API schema | Bir nechta mustaqil constraint |
| Data quality | Barcha buzilgan qatorlar ro‘yxati |
Property-based yoki katta datasetda cheksiz failure yig‘ish xotira va reportni to‘ldiradi. Maksimal misollar soni va summary qo‘llanadi.
Bog‘liqlik xavfi
Keyingi assertion oldingi natijaga tayanadigan bo‘lsa soft davom etish ikkilamchi, chalg‘ituvchi xatolar yaratadi. user null bo‘lsa user.nameni tekshirish exception beradi. Avval structure hard assertion bilan tasdiqlanadi yoki keyingi tekshiruv guard bilan bajariladi.
Bir amalning side effecti xato bo‘lsa keyingi amallarni davom ettirish test state’ni buzishi mumkin. Soft assertion faqat kuzatuv tekshiruvlarini davom ettiradi, workflow step’larini “xato bo‘lsa ham” bajarish uchun emas.
Report sifati
Har soft assertion kontekstga ega nom bilan yoziladi: line_items[3].currency, profile.avatar.alt kabi. Faqat “expected X got Y” qaysi maydon ekanini ko‘rsatmaydi. Aggregate report bir xil formatda expected, actual va pathni chiqaradi.
Katta matn va maxfiy payload to‘liq takrorlanmaydi. Diff qisqartiriladi, artefakt alohida saqlanadi, secret redaction qilinadi. Failurelar deterministik tartibda chiqarilsa CI diff o‘qilishi osonlashadi.
Test dizayni
Soft assertion testni haddan tashqari ko‘p maqsadli qilish uchun ishlatilmaydi. Bir testda turli biznes ssenariylar jamlansa setup va sabab tahlili murakkablashadi. U bitta scenario natijasining mustaqil xususiyatlarini tekshirishga mos.
Test juda ko‘p soft failure bersa umumiy root cause bo‘lishi mumkin. Masalan, noto‘g‘ri locale barcha matn maydonini o‘zgartiradi. Report symptomlarni beradi, tahlil esa ularni bitta sababga birlashtiradi.
CI va retry
Soft assertion bir run’da ko‘p farqni ko‘rsatib, “birini tuzat—yana ishga tushir” siklini qisqartiradi. Biroq testning execution vaqti katta bo‘lsa ham failuredan keyin barcha qimmat tekshiruvni bajarish resurs sarflaydi. Collector limit va muhim hard gate’lar bilan boshqariladi.
Flaky soft assertionlar reportni shovqinli qiladi. Har tekshiruvning timing, selector va data isolation’i barqaror bo‘lishi kerak; ko‘p xabar beqaror testni sifatli qilmaydi.
Bog‘liq tushunchalar
Assertion, Hard assertion, Test failure, Aggregate error, Expected value, Actual value, Test report