PHPUnit لـ PHP: دليل شامل مع أمثلة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

ما هو PHPUnit ولماذا تحتاجه؟

\n\n

PHPUnit هو إطار عمل للاختبارات الوحدوية (unit testing) بلغة PHP. وهو جزء من عائلة xUnit ويوفر للمطورين أدوات لأتمتة التحقق من قابلية عمل المكونات الفردية للبرنامج (الفئات، الطرق، الدوال).

\n\n

لماذا تحتاج PHPUnit؟

\n
    \n
  • اكتشاف الأخطاء المبكر: يتم تشغيل الاختبارات بعد كل تغيير في الكود، مما يسمح باكتشاف الانحدارات (regressions) فورًا.
  • \n
  • توثيق الكود: الاختبارات المكتوبة جيدًا تعمل كتوثيق حي، يوضح كيفية عمل طريقة معينة.
  • \n
  • إعادة الهيكلة دون خوف: يمكنك إعادة كتابة الكود بثقة، مع التأكد من أن الاختبارات لن تسمح بكسر الوظائف الحالية.
  • \n
  • دعم TDD (التطوير القائم على الاختبارات): منهجية يتم فيها كتابة الاختبار أولاً، ثم كتابة الحد الأدنى من الكود لاجتيازه.
  • \n
  • التكامل مع CI/CD: يمكن دمج PHPUnit بسهولة في خطوط التكامل المستمر (GitHub Actions، GitLab CI، Jenkins).
  • \n
\n\n

يدعم PHPUnit الكائنات الوهمية (mock-objects)، والثوابت (fixtures - مجموعات بيانات للاختبارات)، وتغطية الكود (code coverage)، والعديد من الوظائف المتقدمة الأخرى.

\n\n

تثبيت PHPUnit

\n\n

يتم تثبيت PHPUnit عبر Composer - مدير التبعيات لـ PHP. إذا لم يكن لديك Composer بعد، قم بتثبيته من الموقع الرسمي getcomposer.org.

\n\n

التثبيت العام (موصى به لواجهة سطر الأوامر CLI)

\n
composer global require phpunit/phpunit
\n\n

بعد ذلك، تأكد من إضافة دليل الحزم العامة لـ Composer إلى PATH. تحقق من التثبيت:

\n
phpunit --version
\n\n

التثبيت المحلي (داخل المشروع)

\n
composer require --dev phpunit/phpunit
\n\n

بعد ذلك، سيكون PHPUnit متاحًا عبر vendor/bin/phpunit.

\n\n

تثبيت إصدار معين

\n
composer require --dev phpunit/phpunit:^10.0
\n\n

هام: يجب أن يتوافق إصدار PHPUnit مع إصدار PHP في مشروعك. على سبيل المثال، PHPUnit 10 يتطلب PHP 8.1 أو أعلى.

\n\n

بداية سريعة مع مثال كود

\n\n

لننشئ فئة بسيطة Calculator.php ونكتب لها اختبارات.

\n\n

الخطوة 1. إنشاء الفئة المراد اختبارها

\n
<?php\n// src/Calculator.php\n\nclass Calculator\n{\n    public function add(int $a, int $b): int\n    {\n        return $a + $b;\n    }\n\n    public function subtract(int $a, int $b): int\n    {\n        return $a - $b;\n    }\n\n    public function multiply(int $a, int $b): int\n    {\n        return $a * $b;\n    }\n\n    public function divide(int $a, int $b): float\n    {\n        if ($b === 0) {\n            throw new \\InvalidArgumentException("Division by zero");\n        }\n        return $a / $b;\n    }\n}
\n\n

الخطوة 2. إنشاء فئة الاختبار

\n
<?php\n// tests/CalculatorTest.php\n\nuse PHPUnit\\Framework\\TestCase;\n\nclass CalculatorTest extends TestCase\n{\n    private Calculator $calculator;\n\n    protected function setUp(): void\n    {\n        $this->calculator = new Calculator();\n    }\n\n    public function testAdd(): void\n    {\n        $result = $this->calculator->add(2, 3);\n        $this->assertEquals(5, $result);\n    }\n\n    public function testSubtract(): void\n    {\n        $result = $this->calculator->subtract(10, 4);\n        $this->assertEquals(6, $result);\n    }\n\n    public function testMultiply(): void\n    {\n        $result = $this->calculator->multiply(3, 4);\n        $this->assertEquals(12, $result);\n    }\n\n    public function testDivide(): void\n    {\n        $result = $this->calculator->divide(10, 2);\n        $this->assertEquals(5.0, $result);\n    }\                    

توصيات