موفّرو البيانات للاختبارات ذات المعاملات
شغّلوا الاختبار نفسه باستخدام مدخلات متعددة عبر dataProvider
موفّرو البيانات للاختبارات ذات المعاملات درس مجاني في PHP Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في PHP Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة PHP Academy 4 دروس في المجموع.
ما هي موفّرات البيانات؟
موفّر البيانات هو أسلوب يعيد مجموعة من مدخلات الاختبار. يستدعي PHPUnit أسلوب الاختبار مرة لكل مجموعة بيانات، مما يسهّل اختبار مجموعات كثيرة من المدخلات من دون تكرار التعليمات البرمجية.
موفّر بيانات أساسي
يعيد موفّر البيانات مصفوفة ثنائية الأبعاد. وكل مصفوفة فرعية تمثل استدعاءً واحدًا لأسلوب الاختبار.
<?php
public static function additionProvider(): array
{
return [
"two positives" => [2, 3, 5],
"negative" => [-1, 1, 0],
"zeros" => [0, 0, 0],
];
}الربط باستخدام Attribute (PHPUnit 10+)
استخدم السمة #[DataProvider] لربط اختبار بموفّر البيانات الخاص به.
<?php
use PHPUnit\Framework\Attributes\DataProvider;
#[DataProvider("additionProvider")]
public function test_add(int $a, int $b, int $expected): void
{
$this->assertSame($expected, (new Calculator())->add($a, $b));
}مجموعات البيانات المسمّاة
استخدم المفاتيح الترابطية في مصفوفة موفّر البيانات لمنح كل مجموعة بيانات اسمًا وصفيًا؛ إذ تظهر هذه الأسماء في ناتج الاختبار.
<?php
public static function emailProvider(): array
{
return [
"valid email" => ["user@example.com", true],
"missing @" => ["userexample.com", false],
"missing domain" => ["user@", false],
"international" => ["用户@例子.com", true],
];
}إرجاع Generators
يمكن لموفّرات البيانات إرجاع Generator بدلًا من مصفوفة لإنشاء مجموعات البيانات بشكل كسول، وهو أمر مفيد لمجموعات البيانات الكبيرة جدًا.
<?php
public static function largeProvider(): Generator
{
for ($i = 1; $i <= 1000; $i++) {
yield "case $i" => [$i, $i * 2];
}
}مصادر البيانات الخارجية
حمّل بيانات الاختبار من CSV أو JSON أو قاعدة بيانات داخل أسلوب موفّر البيانات، لإجراء الاختبارات باستخدام بيانات من العالم الحقيقي.
<?php
public static function csvProvider(): array
{
$rows = array_map("str_getcsv", file("tests/fixtures/data.csv"));
return array_map(fn($r) => [$r[0], (int)$r[1], (int)$r[2]], $rows);
}موفّرات بيانات متعددة
يمكن لأسلوب الاختبار الإشارة إلى موفّرات متعددة من خلال تكديس السمات.
يجب أن يكون موفّر البيانات static
يجب التصريح عن أساليب موفّر البيانات باستخدام static، لأن PHPUnit يستدعيها قبل إنشاء مثيل من فئة الاختبار.
اختبار الحالات الحدّية
استخدم موفّرات البيانات لتغطية الحالات التالية بصورة منهجية: الصفر، والأعداد السالبة، والسلاسل النصية الفارغة، وnull، والعدد الصحيح الأقصى، وكل موضع يُحتمل أن تظهر فيه أخطاء بسبب الحالات الحدّية.
ناتج موفّر البيانات
تُظهر حالات الفشل اسم مجموعة البيانات: CalculatorTest::test_add with data set "negative" ([-1, 1, 0])، مما يسهّل تحديد الحالة التي فشلت.
دمج موفّرات البيانات مع setUp
يمكن دمج موفّرات البيانات مع setUp. إذ يُشغّل setUp قبل كل تكرار، مما يمنح كل مجموعة بيانات كائنًا جديدًا قيد الاختبار.
اعتبارات الأداء
تُشغّل موفّرات البيانات عند تحميل مجموعة الاختبارات. تجنّب العمليات المكلفة، مثل استدعاءات HTTP واستعلامات قواعد البيانات، داخل موفّرات البيانات، وفضّل استخدام المصانع والبيانات التجهيزية.
الملخص
تلغي موفّرات البيانات تكرار الاختبارات. استخدم المفاتيح الترابطية للحصول على رسائل فشل وصفية. عيّن موفّرات البيانات باستخدام static واربطها بالسمة #[DataProvider].
تحقّق سريع
ما محدِّد الوصول الذي يجب أن تستخدمه دالة موفّر البيانات؟
الأسئلة الشائعة
هل درس «موفّرو البيانات للاختبارات ذات المعاملات» مجاني؟
نعم — نص درس «موفّرو البيانات للاختبارات ذات المعاملات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة PHP Academy، انتقل إلى CoddyKit PRO. تتضمن دورة PHP Academy 4 دروس في المجموع.
ماذا ستتعلم في «موفّرو البيانات للاختبارات ذات المعاملات»؟
شغّلوا الاختبار نفسه باستخدام مدخلات متعددة عبر dataProvider تتمرن على PHP Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ PHP Academy؟
لا تُشترط خبرة سابقة. PHP Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «موفّرو البيانات للاختبارات ذات المعاملات»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس PHP Academy هذا؟
نعم. كل درس في PHP Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- إعداد PHPUnit وأول اختبار
- التأكيدات وأساليب الاختبار
- موفّرو البيانات للاختبارات ذات المعاملات
- محاكاة التبعيات باستخدام PHPUnit