طَبِّقْهاتعلّم المبدأ، وطبّقه بيدكمقرر 245 · ضمان جودة تطبيقات الويب
الدرس 3 · الوحدة 2: تحديد متطلبات الاختبار

المتوقَّع مقابل الفعلي: أول assert

أبسط أداة اختبار وأقواها: جملةٌ واحدة تصرخ حين يخالف الفعلي المتوقَّع. ⏱ نحو 35 دقيقة.

بعد هذا الدرس ستستطيع أن:
  • تستخدم assert للتحقّق الآليّ.
  • تكتب رسالة فشلٍ واضحة.
  • تفهم أن الفشل يوقف البرنامج بـ AssertionError.
  • تنظّم التأكيدات في دوال اختبار.

١assert: التأكيد الذي يصرخ عند الخطأ

الطباعة اليدوية للمقارنة مملّة وتحتاج عينًا تقرؤها. بايثون يقدّم assert: تكتب الشرط الذي يجب أن يكون صحيحًا، فإن تحقّق مرّ بصمت، وإن فشل أوقف البرنامج بخطأ واضح. هذا أساس كل اختبار آليّ.

main.py
def add(a, b):    return a + b assert add(2, 3) == 5        # صحيح: يمرّ بصمتassert add(0, 0) == 0        # صحيحassert add(-1, 1) == 0       # صحيحprint("كل التأكيدات نجحت ✓")
Shell×
>>> %Run main.py
كل التأكيدات نجحت ✓
>>>

لا شيء يُطبَع إلا الرسالة الأخيرة؛ أي أن كل التأكيدات صحيحة. هذا هو «الأخضر»: الاختبار يمرّ.

٢حين يفشل التأكيد

جرّب الآن تأكيدًا خاطئًا، وراقب كيف يتوقّف البرنامج بـ AssertionError:

main.py
def add(a, b):    return a + b assert add(2, 2) == 5, "2 + 2 يجب أن يساوي 4 لا 5"print("لن يُطبَع هذا السطر")
Shell×
>>> %Run main.py
Traceback (most recent call last):
File "main.py", line 4, in <module>
assert add(2, 2) == 5, "2 + 2 يجب أن يساوي 4 لا 5"
AssertionError: 2 + 2 يجب أن يساوي 4 لا 5
>>>

الرسالة بعد الفاصلة تشرح ماذا توقّعنا. اكتبها دائمًا: رسالة فشلٍ واضحة توفّر دقائق من الحيرة. لاحظ أن السطر الأخير لم يُطبَع لأن البرنامج توقّف عند الفشل.

٣اختبارٌ منظّم بدوال

نجمع التأكيدات في دوال test_، ونشغّلها بمُشغّلٍ بسيط يعدّ النجاح والفشل — بذرة إطار الاختبار الذي سنتعلّمه لاحقًا:

main.py
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))
Shell×
>>> %Run main.py
نجح 3 من 3
>>>

توقّع وتحقّق

assert يوقف البرنامج حين:

الشرط المعتاد في التأكيد:

نوع الخطأ عند فشل assert:

الرسالة بعد الفاصلة في assert:

الخلاصة

تحدٍّ برمجي: أكّد الصحة

تمهيدي

اكتب ثلاثة تأكيدات لدالة square: للمدخل 3 و0 و-2، ثم اطبع رسالة نجاح.

المطلوب:
  • أكّد square(3)==9 وsquare(0)==0 وsquare(-2)==4.
  • اطبع رسالة نجاح بعدها.

ابدأ من هذا الكود، واضغط ▶ شغّل هنا لتكتب حلّك وتجرّبه مباشرة:

main.py
def square(n):    return n * n# اكتب ثلاثة تأكيدات ثم اطبع رسالة نجاح
المطلوب×
نجحت الاختبارات
💡 تلميح 1
assert square(3) == 9, "...".
💡 تلميح 2
بعد التأكيدات: print("نجحت الاختبارات").

حاول بنفسك أولًا؛ للمسألة أكثر من حلّ صحيح.

main.py
def square(n):    return n * nassert square(3) == 9assert square(0) == 0assert square(-2) == 4print("نجحت الاختبارات")
انتقل إلى تقييم الدرساختيار من متعدد، وصح وخطأ، وأكمل الفراغ، وتتبّع الناتج.ابدأ التقييم ←

📝 معلم؟ أرسل ملاحظة للمؤلف عن هذا الدرس