Canned response — test double yoki mock oldindan sozlangan chaqiruvga qaytaradigan tayyor, o‘zgarmas javob. U tashqi servis, repository yoki funksiyaning ma’lum ssenariydagi natijasini deterministik takrorlashga xizmat qiladi. Masalan, HTTP client mocki har chaqiruvda oldindan yozilgan 200 status va JSON payload qaytarishi mumkin.
Stub xulqi
Canned response odatda stubning eng sodda ko‘rinishidir. Inputning barcha ma’nosini hisoblamaydi; matcherga mos chaqiruv bo‘lsa belgilangan qiymatni beradi. Test shu qiymatga test qilinayotgan kod qanday munosabat bildirganini tekshiradi.
client.get.return_value = {
"status": 200,
"body": {"id": 42, "active": True},
}
Bu kod client protokolining real tarmoq xatti-harakatini emas, bitta natijani modellashtiradi. Assertion production kod qaytgan body’ni to‘g‘ri parse qilishi yoki domain modelga aylantirishiga qaratiladi.
Javoblar ketma-ketligi
Retry testida canned response ketma-ket berilishi mumkin: avval timeout, keyin 503, so‘ng 200. Double har chaqiruvda navbatdagi elementni qaytaradi yoki exception chiqaradi. Urinishlar soni ro‘yxatdan oshsa test xato berishi, default javobga o‘tmasligi ma’qul; bu kutilmagan ortiqcha retryni aniqlaydi.
Vaqtga bog‘liq javob uchun oddiy o‘zgarmas qiymat yetmaydi. Callback yoki side effect funksiya argument va call countga qarab natija yasaydi. Bu canned response’dan dinamik stubga o‘tishdir.
Fixture fayllari
Katta JSON yoki XML javoblar fixture yoki golden file’da saqlanishi mumkin. Faylga providerning haqiqiy maxfiy ma’lumoti kiritilmaydi; shaxsiy va token maydonlari olib tashlanadi. Fixture encoding, content type va schema version bilan bog‘lanadi.
Katta payload testning aynan qaysi maydonga tayanishini yashirishi mumkin. Unit test faqat kerakli minimal fieldlarni ishlatadi, parser compatibility testi esa to‘liq representative fixture bilan bajariladi. Provider schema o‘zgarganda fixture avtomatik yangilanmaydi.
Xato javoblari
Faqat muvaffaqiyatli canned response happy-pathni tekshiradi. Validatsiya xatosi, authorization, rate limit, bo‘sh natija, noto‘g‘ri JSON va timeout alohida ssenariy sifatida beriladi. HTTP status bilan body semantikasi bir-biriga mos bo‘ladi; aks holda test real bo‘lmagan holatni tekshiradi.
Malformed javob parserning himoyasini tekshirishi mumkin. Bunda xato ataylab ekani test nomi va fixture’da aniq ko‘rsatiladi.
Contract drift
Canned response consumerning provider haqidagi taxminidir. Provider yangi majburiy maydon, boshqa enum yoki pagination formatiga o‘tsa, lokal test o‘tishda davom etadi. Contract testing provider implementatsiyasini consumer kutgan interactionga qarshi tekshiradi. Davriy integration test real sandbox bilan transport va autentifikatsiyani ham qamrab oladi.
Canned response testni tez va izolatsiyalangan qiladi, ammo real service availability, latency yoki rate-limit algoritmini o‘lchamaydi. U qaysi test darajasida ishlatilgani hisobotda aniq bo‘ladi.
Matching qoidasi
Bir endpoint uchun turli canned response kerak bo‘lsa request method, path, query va muhim body fieldlari matcherga kiradi. Matcher faqat call tartibiga tayansa, test implementation ketma-ketligiga bog‘lanadi. Semantik requestga qarab javob tanlash real stub serverga yaqinroq.
Response headerlari
HTTP client faqat body emas, Content-Type, Retry-After, ETag, pagination linki va cache headerlariga ham tayanishi mumkin. Canned response shu headerlarni realist beradi. 429 javobida Retry-After bo‘lmasa test client fallback backoffini, mavjud bo‘lsa header talqinini alohida tekshiradi.
Serializatsiya chegarasi
Method mock Python dictionary qaytarsa JSON encoding, charset va malformed byte holatini chetlab o‘tadi. Parserni test qilish uchun fake HTTP server raw bytes va header yuboradi. Unit test domain adapterini, integration test transport adapterini qamrab oladi. Qaysi boundary double qilinganiga qarab canned response shakli tanlanadi.
Tasdiqlash jarayoni
Providerdan yozib olingan response fixture sifatida ishlatilsa, maxfiy fieldlar sanitizatsiya qilinadi va tasdiqlangan schema bilan tekshiriladi. Recordingni har testda avtomatik yangilash natijani nondeterministik qiladi; yangilanish alohida review jarayonidir.
Bog‘liq tushunchalar
Stub, Mock object, Fixture, Side effect, Contract testing, Test double