اختبار PHP: أطر العمل والأدوات لتحقيق كود عالي الجودة

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

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

ابدأ الدورة

اختبار PHP: أطر العمل والأدوات

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



1. PHPUnit — المعيار الفعلي

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

  • دعم التأكيدات (assertions) — من البسيط assertEquals إلى المعقد assertJsonStructure.
  • الإعدادات المسبقة (Fixtures) لإعداد وتنظيف البيانات (setUp(), tearDown()).
  • إنشاء تقارير بتنسيقات HTML و XML و Clover.
  • التكامل مع CI/CD (GitHub Actions, GitLab CI, Jenkins).
<?phpuse PHPUnit\\Framework\\TestCase;

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

public function testDivisionByZero() { $this->expectException(\\DivisionByZeroError::class); $calc = new Calculator(); $calc->divide(10, 0); }}


2. Mockery — إنشاء كائنات وهمية مرنة

تعمل Mockery على توسيع إمكانيات PHPUnit في إنشاء الكائنات الوهمية (mock objects). وهي مفيدة عندما تحتاج إلى استبدال خدمة معقدة أو قاعدة بيانات.

  • دعم الكائنات الوهمية الجزئية (partial mocks).
  • التحقق من ترتيب استدعاءات الدوال (shouldReceive).
  • العمل مع الدوال السحرية (__call, __get).
<?phpuse Mockery as m;

class OrderProcessorTest extends TestCase{ public function testProcess() { $gateway = m::mock(PaymentGateway::class); $gateway->shouldReceive('charge') ->once() ->with(100.0) ->andReturn(true);

$processor = new OrderProcessor($gateway); $this->assertTrue($processor->process(100.0)); }

protected function tearDown(): void { m::close(); }}


3. Codeception — الكل في واحد

يجمع Codeception بين اختبارات الوحدات والاختبارات الوظيفية واختبارات القبول في صيغة واحدة. وهو شائع بشكل خاص في مشاريع الويب حيث تحتاج إلى اختبار النماذج وطلبات AJAX وقواعد البيانات.

  • وحدات للعمل مع PHPBrowser و Selenium و Laravel و Symfony.
  • إنشاء الاختبارات عبر CLI: codecept generate:test.
  • دعم التطوير الموجه بالسلوك (BDD) عبر Gherkin.
<?php// acceptance.suite.ymlactor: AcceptanceTestermodules:    enabled:        - WebDriver:            url: 'http://localhost'            browser: chrome        - Laravel5:            environment_file: .env.testing

// tests/acceptance/LoginCept.php$I = new AcceptanceTester($scenario);$I->wantTo('see that login form works');$I->amOnPage('/login');$I->fillField('email', 'user@example.com');$I->fillField('password', 'secret');$I->click('Login');$I->see('Dashboard');


4. Pest — صيغة مبسطة

Pest هو بديل حديث لـ PHPUnit بصيغة موجزة، مستوحى من مكتبة JavaScript Jest. مثالي لمن يقدرون سهولة قراءة الاختبارات.

  • حل تلقائي للتبعيات.
  • سلاسل التأكيدات: expect($result)->toBeTrue().
  • دعم مدمج للتشغيل المتوازي.
<?phpuse function Pest\\Faker\\faker;

test('it creates a user', function () { $user = User::factory()->create([ 'name' => faker()->name, 'email' => faker()->email, ]);

expect($u

توصيات