اختبار PHP: نظرة عامة على الأطر والأدوات (PHPUnit, Pest, Codeception)

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

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

ابدأ الدورة

مقدمة في اختبار تطبيقات PHP

الاختبار هو جزء لا يتجزأ من التطوير الاحترافي في PHP. فهو يسمح باكتشاف الأخطاء في المراحل المبكرة، ويبسط إعادة الهيكلة، ويزيد من استقرار الكود. في نظام PHP البيئي، توجد مجموعة قوية من الأدوات: من PHPUnit الكلاسيكي إلى الأطر الحديثة مثل Pest والأدوات المتخصصة لتحليل التغطية والاختبار الطفري.

في هذه المقالة، سنستعرض الأطر والأدوات الرئيسية التي ستساعدك في تنظيم اختبار عالي الجودة لمشاريع PHP.



PHPUnit — أساس الاختبار

PHPUnit هو المعيار الفعلي لاختبار الوحدة في PHP. وهو يدعم جميع الإمكانيات الحديثة: التأكيدات، الإعدادات المسبقة (setUp/tearDown)، مزودي البيانات، اختبار الاستثناءات، النماذج الوهمية (stubs) والمحاكاة (mocks).

التثبيت عبر Composer:

composer require --dev phpunit/phpunit


مثال لاختبار بسيط لفئة آلة حاسبة:

<?phpuse PHPUnit\\Framework\\TestCase;

class CalculatorTest extends TestCase{ public function testAddition() { $calculator = new Calculator(); $this->assertEquals(4, $calculator->add(2, 2)); }

/** @dataProvider additionProvider */ public function testWithDataProvider($a, $b, $expected) { $calculator = new Calculator(); $this->assertEquals($expected, $calculator->add($a, $b)); }

public function additionProvider(): array { return [ [0, 0, 0], [1, 1, 2], [-1, 1, 0], ]; }}


الإمكانيات الرئيسية لـ PHPUnit:

  • التأكيدات: assertEquals, assertTrue, assertCount, assertInstanceOf وعشرات غيرها.
  • الإعدادات المسبقة: طريقتي setUp() و tearDown() لإعداد البيئة وتنظيفها.
  • مزودي البيانات: التعليق التوضيحي @dataProvider لتشغيل اختبار واحد بمجموعات بيانات مختلفة.
  • اختبار الاستثناءات: expectException() و expectExceptionMessage().
  • النماذج الوهمية والمحاكاة: createMock() و getMockBuilder() لعزل الكود المختبر.


Pest — أنيق وحديث

Pest هو إطار اختبار مبني فوق PHPUnit، لكنه يتميز ببناء جملة أكثر إيجازاً وتعبيراً. وهو مستوحى من Jest (JavaScript) ومناسب تماماً للمشاريع التي تهم فيها قابلية قراءة الاختبارات.

التثبيت:

composer require --dev pestphp/pest


مثال لنفس الاختبار في Pest:

<?php

use function Pest\\Faker\\fake;

test('addition works correctly', function () { $calculator = new Calculator(); expect($calculator->add(2, 2))->toBe(4);});

dataset('numbers', [ [0, 0, 0], [1, 1, 2], [-1, 1, 0],]);

test('addition with data provider', function ($a, $b, $expected) { $calculator = new Calculator(); expect($calculator->add($a, $b))->toBe($expected);})->with('numbers');


مزايا Pest:

  • الحد الأدنى من الكود النمطي — لا حاجة لإنشاء فئات اختبار.
  • دوال مدمجة expect(), test(), it() لوصف طبيعي باللغة.
  • تسجيل تلقائي للاختبارات من الدوال العامة.
  • دعم المجموعات المتداخلة (describe) والاختبارات المعمارية.


Codeception — للاختبار التكاملي و BDD

Codeception هو إطار شامل يجمع بين اختبارات الوحدة، والوظيفية، والتكاملية، والقبول. وهو شائع بشكل خاص عند اختبار تطبيقات الويب (Laravel, Symfony, Yii) وواجهات API.

التثبيت:

composer require --dev codeception/codeception


مثال لاختبار قبول لتسجيل الدخول إلى موقع:

<?php$I = new AcceptanceTester($scenario);$I->amO                    

توصيات