AzLearn

اختبارات assertions

Assertions

مفهوم ~19 دقيقة

اختبارات assertions — Assertions

يمكنك اختبار دوال Bash الصغيرة بدون إطار عمل ضخم. دالة assert_eq تستقبل المتوقع والفعلي، وتقارن النصين، وتفشل برسالة واضحة إذا اختلفا. هذه الطريقة مناسبة للدوال التي تنتج نصاً أو تصنف قيمة. ليست بديلاً عن اختبارات متقدمة، لكنها بداية قوية.

الأفضل أن تصمم الدوال لتكون سهلة الاختبار. دالة تأخذ قيمة وتطبع نتيجة أسهل من دالة تقرأ ملفات وتغير النظام وتطبع وتخرج كلها في وقت واحد. هذا سبب آخر لتقسيم السكربت إلى دوال صغيرة.

مشكلة assert_eq مع set -e

إذا استخدمت assert_eq ببساطة مع set -e، يخرج السكربت عند أول فشل ولا تعرف نتائج باقي الاختبارات. هذا يجعل إصلاح مجموعة اختبارات أصعب من اللازم.

الحل: نمط “العداد” — اجمع الفشل في متغير وأخرج في النهاية بعد تشغيل الكل:

script.sh

النمط assert_eq ... || ((failures++)) يمنع set -e من إيقاف السكربت لأن || تعطّل -e لهذا التعبير. بهذا يعمل كل assert ونرى كل النتائج قبل الحكم.

في اختبار حقيقي، اجعل كل assert يطبع اسم الحالة حتى تعرف أين فشل.

bats — إطار الاختبارات المعتمد

للمشاريع التي تحتاج اختبارات منظمة، bats (Bash Automated Testing System) هو الخيار القياسي. يوفر تنظيماً لاسم الاختبار، عزلاً للحالات، وتقارير واضحة:

# تثبيت: https://github.com/bats-core/bats-core
@test "upper converts to uppercase" {
  result="$(upper "bash")"
  [ "$result" = "BASH" ]
}

للدوال المستقلة التي لا تحتاج بيئة معقدة، نمط assert_eq يكفي. للسكربتات الكاملة، استخدم bats.

الاختبار لا يحتاج شبكة

افصل منطق التصنيف عن curl أو systemctl. اختبر التصنيف بقيم ثابتة، ثم اختبر أمر الشبكة يدوياً أو في بيئة مناسبة.

تحدي — Challenge