1. مبتدئ

    ما الفرق بين unit tests و integration tests؟

    تختبر unit tests وحدة صغيرة (دالة أو class) معزولة عن الاعتماديات الخارجية وتعمل بسرعة، بينما تختبر integration tests تعاون عدة أجزاء حقيقية مثل الكود مع قاعدة البيانات أو HTTP.

    اقرأ الشرح الكامل
  2. مبتدئ

    ما دور fixtures في pytest؟

    تجهّز الـ fixture اعتمادية أو بيانات يحتاجها الاختبار ويطلبها بالاسم كمعامل، وتتحكم في دورة حياتها (scope) وتنظيفها بعد yield.

    اقرأ الشرح الكامل
  3. مبتدئ

    كيف تختبر حالات متعددة دون تكرار الكود؟

    استخدم pytest.mark.parametrize لتشغيل نفس الاختبار على عدة مدخلات ونتائج متوقعة، فيظهر كل case كاختبار مستقل في التقرير.

    اقرأ الشرح الكامل
  4. متوسط

    كيف تستخدم mock و patch بشكل صحيح؟

    طبّق patch على الاسم في المكان الذي يستخدمه الكود تحت الاختبار، لا المكان الذي عُرّف فيه، واستخدم autospec حتى يفشل الـ mock إذا استُدعي بتوقيع خاطئ.

    اقرأ الشرح الكامل
  5. متوسط

    كيف تختبر الكود غير المتزامن (async)؟

    استخدم IsolatedAsyncioTestCase في unittest، أو إضافة مثل pytest-asyncio أو anyio في pytest، حتى يُنفذ الاختبار داخل event loop وتنتظر الـ coroutine فعليًا.

    اقرأ الشرح الكامل
  6. مبتدئ

    كيف تتحقق من أن الدالة ترمي الاستثناء الصحيح؟

    استخدم pytest.raises (أو assertRaises في unittest) كمدير سياق حول السطر المتوقع فشله فقط، مع فحص النوع والحقول المهمة أو جزء من الرسالة عبر match.

    اقرأ الشرح الكامل
  7. متوسط

    كيف تمنع الوقت والعشوائية من جعل الاختبارات غير مستقرة (flaky)؟

    مرر الساعة ومصدر العشوائية كاعتماديات قابلة للاستبدال بدل استدعاء datetime.now() أو random مباشرة داخل منطق الـ domain، ثم ثبّتهما في الاختبار.

    اقرأ الشرح الكامل
  8. متوسط

    كيف تختبر كود HTTP دون الاعتماد على شبكة حقيقية؟

    اختبر الـ client عبر transport وهمي أو fake server، مع محاكاة الحالات الفاشلة (timeouts و 5xx و payload غير صالح)، ثم أضف عددًا محدودًا من اختبارات العقد أو التكامل ضد الخدمة الحقيقية.

    اقرأ الشرح الكامل
  9. متقدم

    هل تعني نسبة coverage العالية أن الكود مختبر جيدًا؟

    لا؛ تقيس الـ coverage الأسطر أو الفروع التي نُفذت أثناء الاختبارات، لا جودة الـ assertions ولا تغطية الحالات الخطرة. هي إشارة مفيدة لكنها ليست هدفًا بحد ذاتها.

    اقرأ الشرح الكامل
  10. متقدم

    ما هو contract test ومتى يفيد؟

    يتحقق contract test من أن طرفين (مثل خدمة و client، أو adapter وواجهته) يتفقان على شكل البيانات ودلالاتها، دون تشغيل النظام كاملًا end-to-end.

    اقرأ الشرح الكامل