محتويات الدورة

PHP / متوسط: الكائنات والحفظ والاختبار / الدرس 12

اختبار عقود PHP بأدلة معزولة

ابنِ فحوصاً حتمية للقيم والأخطاء والإخراج والحالة. افهم ما يثبته تجهيز CLI صغير وأين يلزم تكامل HTTP أو القاعدة أو التطبيق.

وقت القراءة التقريبي: 3 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • استخدام توقع مستقل وتحقق صارم.
  • ضبط التجهيز والوقت وإدخال الفشل.
  • تمييز الاختبار المركز من التكامل ومقاييس التغطية.

يحتاج الاختبار نتيجة متوقعة مبررة

يجهز الاختبار ويفعل ويقارن بمرجع مستقل. يكرر استخدام حاسب الإنتاج للمتوقع العيب. سجل أمثلة سنتات وحدوداً مراجعة وافحص النوع عند أهميته؛ فقد تخفي المرونة نصاً. لا تعتمد على تفعيل assert إذ قد يعطلها الإعداد. يوفر فحص صريح يرمي إشارة محلية دون إطار أو تطبيق.

php تحققات صارمة مستقلة عن إعداد assert
<?php
declare(strict_types=1);
function same(mixed $actual, mixed $expected): void {
    if ($actual !== $expected) { throw new RuntimeException("assertion failed"); }
}
function total(int $price, int $count): int { return $price * $count; }
same(total(125, 4), 500);
same(total(0, 4), 0);
echo "2 checks passed", PHP_EOL;
الناتج المتوقع
2 checks passed

تشتق الثوابت مستقلاً ويفشل النوع أو العدد الخاطئ.

إعطاء كل حالة بداية مستقلة

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

اختبار فشل محدد وآثاره الممنوعة

يتحقق السلبي من فئة الخطأ وثبات الحالة لا أي استثناء؛ فقد يبدو غياب صنف تحققاً ناجحاً. استخدم بدائل محلية للمحولات واحفظ تكاملاً منفصلاً. يمسك المثال النوع المقصود ويفحص عداداً لا يتغير. يوضح عقداً متزامناً لا دفعاً بعيداً أو معاملة. اجعل الضرر المكشوف واضحاً في الاسم والشرح.

php تصنيف الخطأ وغياب التعديل
<?php
declare(strict_types=1);
$state = ["reserved" => 0];
function reserve(array &$state, int $count): void {
    if ($count < 1) { throw new InvalidArgumentException("positive count required"); }
    $state["reserved"] += $count;
}
$rejected = false;
try { reserve($state, 0); } catch (InvalidArgumentException $error) { $rejected = true; }
if (!$rejected || $state["reserved"] !== 0) { throw new RuntimeException("rejection contract failed"); }
echo "rejected; reserved=", $state["reserved"], PHP_EOL;
الناتج المتوقع
rejected; reserved=0

لا تزيد الكمية المرفوضة العداد، ويفشل عيب آخر بدلاً من قبوله.

اختيار الدليل للسؤال الفعلي

تفسر الوحدة الحساب بكلفة قليلة ويبين PDO التفاعل على مشغل محدد ويرصد HTTP الحالة والترويسات والكوكيز والجسم التي لا يثبتها CLI. تفحص رحلة المتصفح الاستخدام والتصحيح. احتفظ بتركيب مفيد لا كل حساب بالمتصفح. أكد الإصلاح بأصله واختر الانحدار من الاعتماد المتغير. حدّد مستوى وبيئة وافتراض النتيجة دون تعميم محلي.

تقيس التغطية التنفيذ لا الثقة وحدها

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

الأخطاء الشائعة وإصلاحها

اعتماد الاختبار على إعداد assert

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

نجاح السلبي بأي استثناء

لماذا يحدث؟
اتساع مرجع الفشل.
كيف تصلحه؟
فحص النوع والأثر الممنوع.
كيف تتجنب تكراره؟
إبقاء ضابط نجاح بالتجهيز نفسه.

اشتراك الاختبارات في سجل بداية متغير

لماذا يحدث؟
خفاء ملكية التجهيز وإعادته.
كيف تصلحه؟
إنشاء حالة مستقلة وتنظيف موثوق.
كيف تتجنب تكراره؟
تشغيل الزوج المشتبه بالترتيبين للتشخيص.

اختبر فهمك

1. لماذا expected=total(...) مرجع ضعيف لاختبار الدالة نفسها؟

اعرض الحل المشروح

يكرر التنفيذ فيتفق العيب مع نفسه. استخدم ثوابت مراجعة مثل 125×4=500 والصفر والحدود، وافحص الرفض وفق العقد لا افتراض الصحة بالتغطية.

2. أي دليل إضافي يلزم بعد نجاح نموذج استجابة CLI؟

اعرض الحل المشروح

افحص HTTP معزولاً للحالة والنوع والترويسات والكوكيز والجسم، وأضف مهمة متصفح للتصحيح ولوحة المفاتيح عند الحاجة. يبقى CLI دليلاً للبناء لا خصائص تكامل غير مرصودة.

أهم ما تعلمته

  • استخدم مراجع مستقلة وتجهيزاً مملوكاً.
  • تتبع الثقة الملاحظات المفيدة والحدود الصريحة.

المراجع الرسمية