اختبار نتائج الدوال
عندما تكتب دالة، اختبرها بأمثلة تعرف نتيجتها مسبقًا. يوفر تيكبامين أداة تعليمية صغيرة اسمها check_result(actual, expected). تقارن الأداة بين القيمة التي أنتجها الكود والقيمة التي توقعتها. إذا تطابقت القيمتان يستمر التنفيذ، وإذا اختلفتا تحصل على خطأ واضح.
def double(x):
return x * 2
check_result(double(3), 6)
check_result(double(10), 20)
عندما تكتب دالة، اختبرها بأمثلة تعرف نتيجتها مسبقًا. يوفر تيكبامين أداة تعليمية صغيرة اسمها check_result(actual, expected). تقارن الأداة بين القيمة التي أنتجها الكود والقيمة التي توقعتها. إذا تطابقت القيمتان يستمر التنفيذ، وإذا اختلفتا تحصل على خطأ واضح.
الاختبار المفيد يجب أن يفشل أيضًا عندما تكون الدالة خاطئة. غيّر double مؤقتًا بحيث تعيد قيمة غير صحيحة، ثم شغّل استدعاءات check_result نفسها واقرأ رسالة الخطأ. بعد ذلك أعد تنفيذ الدالة الصحيح.
أكمل القيم المتوقعة في الاختبارين التاليين:
def double(x):
return x * 2
def quadruple(x):
return double(double(x))
check_result(quadruple(2), ...)
check_result(quadruple(5), ...)
استبدل كل ... بالنتيجة الصحيحة التي يجب أن تعيدها quadruple.
من فوائد الاختبارات أيضًا أن أي شخص يستطيع قراءتها وفهم أمثلة واضحة وغير ملتبسة عن وظيفة الدالة. وهذا مفيد خصوصًا عندما يصعب وصف الدالة بالكلمات.
مثلًا، انظر إلى الاختبارين:
check_result(surround("more", "++"), "++more++")
check_result(surround("the same", "="), "=the same=")
لا نحتاج إلى شرح طويل لما تفعله surround؛ الأمثلة توضحه مباشرة.
اكتب دالة surround تجتاز هذين الاختبارين، وتبدأ هكذا:
def surround(string, sides):
يجب إضافة الوسيط
sidesقبلstringوبعده.استخدم دمج النصوص لتنفيذ ذلك.
تأكد أن جسم الدالة مزاح إلى الداخل.
تأكد أنك تعيد قيمة باستخدام
returnفي النهاية.تأكد أنك لا تستدعي
surroundداخل جسمsurround. راجع المسافات البادئة.
ممتاز! اكتب الآن دالة alert تجتاز الاختبارين التاليين:
check_result(alert("Warning", 2), "!! Warning !!")
check_result(alert("DANGER", 4), "!!!! DANGER !!!!")
لا يُسمح لجسم alert أن يحتوي على العامل +. استخدم الدالة surround بدلًا منه. يجب أن تبدأ الدالة هكذا:
def alert(string, level):
الفكرة أن تحيط النص أولًا بالمسافات، ثم تضيف زوجًا من علامات التعجب في كل دورة حتى تصل إلى المستوى المطلوب، مع استخدام القيمة التي تعيدها surround في كل مرة.
يجب إحاطة
stringبمسافة واحدة وlevelمن علامات التعجب (!) من كل جانب.ضمّن تعريف
surroundالسابق في برنامجك واستدعها داخلalert.استخدم
surroundلإضافة المسافات.استخدم
surroundلإضافة علامات التعجب.لا يُسمح لك بوضع عدة علامات تعجب في نص واحد، لذا استدعِ
surroundعدة مرات.أي استدعِ
surroundمرة لكل زوج من علامات التعجب.إذًا استدعِ
surround(..., '!')عدة مرات.استخدم حلقة لتكرار الاستدعاء.
استخدم
range(n)لكي تنفذ الحلقةnدورات.تأكد أنك تستخدم القيمة التي تعيدها
surround.فكر كيف تبني نصًا باستخدام
+=: حدّث المتغير نفسه مرارًا حتى يكتمل الناتج.أي اكتب
something = surround(something, '!')داخل الحلقة.تأكد أنك تعيد قيمة باستخدام
returnفي نهايةalert.لا تضع
returnداخل الحلقة؛ ضعها بعدها. راجع المسافات البادئة.تأكد أنك لا تستدعي
alertداخل جسمalert. راجع المسافات البادئة.
عمل ممتاز! أساليب الاختبار التي تعلمتها ستصبح مفيدة جدًا في الدروس القادمة.