المتوقَّع مقابل الفعلي: أول assert
أبسط أداة اختبار وأقواها: جملةٌ واحدة تصرخ حين يخالف الفعلي المتوقَّع. ⏱ نحو 35 دقيقة.
- تستخدم
assertللتحقّق الآليّ. - تكتب رسالة فشلٍ واضحة.
- تفهم أن الفشل يوقف البرنامج بـ
AssertionError. - تنظّم التأكيدات في دوال اختبار.
١assert: التأكيد الذي يصرخ عند الخطأ
الطباعة اليدوية للمقارنة مملّة وتحتاج عينًا تقرؤها. بايثون يقدّم assert: تكتب الشرط الذي يجب أن يكون صحيحًا، فإن تحقّق مرّ بصمت، وإن فشل أوقف البرنامج بخطأ واضح. هذا أساس كل اختبار آليّ.
def add(a, b): return a + b assert add(2, 3) == 5 # صحيح: يمرّ بصمتassert add(0, 0) == 0 # صحيحassert add(-1, 1) == 0 # صحيحprint("كل التأكيدات نجحت ✓")
لا شيء يُطبَع إلا الرسالة الأخيرة؛ أي أن كل التأكيدات صحيحة. هذا هو «الأخضر»: الاختبار يمرّ.
٢حين يفشل التأكيد
جرّب الآن تأكيدًا خاطئًا، وراقب كيف يتوقّف البرنامج بـ AssertionError:
def add(a, b): return a + b assert add(2, 2) == 5, "2 + 2 يجب أن يساوي 4 لا 5"print("لن يُطبَع هذا السطر")
الرسالة بعد الفاصلة تشرح ماذا توقّعنا. اكتبها دائمًا: رسالة فشلٍ واضحة توفّر دقائق من الحيرة. لاحظ أن السطر الأخير لم يُطبَع لأن البرنامج توقّف عند الفشل.
٣اختبارٌ منظّم بدوال
نجمع التأكيدات في دوال test_، ونشغّلها بمُشغّلٍ بسيط يعدّ النجاح والفشل — بذرة إطار الاختبار الذي سنتعلّمه لاحقًا:
def to_upper(s): return s.upper() def test_basic(): assert to_upper("abc") == "ABC" def test_empty(): assert to_upper("") == "" def test_arabic_passthrough(): assert to_upper("سلام") == "سلام" # العربية بلا حالة أحرف # مُشغّل بسيطtests = [test_basic, test_empty, test_arabic_passthrough]passed = 0for t in tests: try: t(); passed += 1 except AssertionError: print("فشل:", t.__name__)print("نجح", passed, "من", len(tests))
توقّع وتحقّق
assert يوقف البرنامج حين:
الشرط المعتاد في التأكيد:
نوع الخطأ عند فشل assert:
الرسالة بعد الفاصلة في assert:
الخلاصة
assertيتحقّق من شرطٍ يجب أن يصحّ؛ ينجح بصمت ويفشل بخطأ واضح.- الشرط عادةً الفعلي
==المتوقَّع، والرسالة تصف المتوقَّع. - الفشل يرفع
AssertionErrorويوقف التنفيذ. - نجمع التأكيدات في دوال
test_ونشغّلها بمُشغّل يعدّ النجاح والفشل.
تحدٍّ برمجي: أكّد الصحة
تمهيدياكتب ثلاثة تأكيدات لدالة square: للمدخل 3 و0 و-2، ثم اطبع رسالة نجاح.
- أكّد
square(3)==9وsquare(0)==0وsquare(-2)==4. - اطبع رسالة نجاح بعدها.
ابدأ من هذا الكود، واضغط ▶ شغّل هنا لتكتب حلّك وتجرّبه مباشرة:
def square(n): return n * n# اكتب ثلاثة تأكيدات ثم اطبع رسالة نجاح
💡 تلميح 1
assert square(3) == 9, "...".💡 تلميح 2
print("نجحت الاختبارات").حاول بنفسك أولًا؛ للمسألة أكثر من حلّ صحيح.
def square(n): return n * nassert square(3) == 9assert square(0) == 0assert square(-2) == 4print("نجحت الاختبارات")