مقدمة في الاختبارات الآلية
السلام عليكم،
تكلمنا سابقاً عن أهمية الاختبارات الآلية وفائدتها، واليوم سيكون درس سريع لكيفية استخدام مكتبة SimpleTest مع PHP.

سنقوم سوياً عبر عدة تدوينات لهذا الغرض (الاختبارات الآلية) بإنشاء مشروع صغير لإدارة شؤون شركة صغيرة والموظفين فيها.
ملاحظة: الكود المستخدم للـ PHP 5 فقط
في هذه البداية السريعة سنقوم بالتالي:
- نذهب إلى موقع مكتبة SimpleTest لتحميل آخر إصدار منها.
- ننشأ مجلد جديد لهذا المشروع الصغير في localhost ونسميه مثلاً crm.
- ننشأ مجلد جديد داخل مجلد crm ونسميه tests ونفك ضغط مكتبة SimpleTest فيه بحيث نحصل على crm/tests/simpletest أي داخل مجلد tests يوجد مجلد simpletest الذي يحتوي ملفات المكتبة ومنها autorun.php
- داخل مجلد crm ننشأ ملف نسميه salary.php ونكتب داخله صنف بسيط لحساب الراتب:
<?php class Salary { public $tax; public function __construct($default_tax) { $this->tax = $default_tax; } public function calculateSalaryTax($salary) { return $salary * $this->tax; } } ?> - سنكتب الآن الاختبار لذلك الصنف، يمكننا كتابة الاختبار في نفس الملف ولكن من الأفضل دائماً أن ننشأ ملف خاص باختبار كل صنف، داخل مجلد tests أنشىء ملف اسمه salary_test.php :
<?php // include test library require_once 'simpletest/unit_tester.php'; require_once 'simpletest/reporter.php'; // include salary class require_once '../salary.php'; class TestSalary extends UnitTestCase { private $salary; public function __construct($name) { $this->salary = new Salary(0.05); $this->UnitTestCase($name); } public function TestSalesTax() { $this->assertEqual(5, $this->salary->calculateSalaryTax(100)); } public function TestRandomSalaryTax() { $radnom_salary = rand(2000, 30000); $tax_for_random_salary = $radnom_salary * $this->salary->tax; $this->assertEqual($tax_for_random_salary, $this->salary->calculateSalaryTax($radnom_salary)); } } ?>أول سطرين فيهما ضم لملفات مكتبة SimpleTest التي تهمنا وهم ملف unit_tester المسؤول عن الاختبارات وملف reporter الذي سيظهر لنا نتيجة الاختبار، بعد ذلك ضممنا ملف صنف الراتب الذي أنشأناه قبل قليل، وبعد ذلك ننشأ صنف جديد لهذا الاختبار ونسميه TestSalary وهذا الصنف يرث من صنف UnitTestCase الموجود في مكتبة .SimpleTest.
داخل تابع البناء عرفنا متحول جديد (object) من نوع Salary ومررنا قيمة الضريبة في تابع البناء للراتب. السطر التالي هو فقط لإسناد اسم لهذا الاختبار (سنرى ذلك بعد قليل).
التابع الذي يليه هو TestSalesTax حيث سنختبر الضريبة على راتب معين، فوضعنا قيمة الراتب 100 والضريبة ستكون 5% إذن قيمة الضريبة ستكون 5. تابع assertEqual ييستقبل بارامترين (2 parameters) الأول هو القيمة المتوقعة والثاني هو التابع الذي سيرد قيمة مثل القيمة المتوقعة وفي حال تطابقهما ينجح هذا الاختبار، إذن هذا هو تابع الاختبار الفعلي. نختبر إذا كانت القيمة التي سيردها تابع calculateSalaryTax على راتب 100 هي 5.
في التابع التالي TestRandomSalaryTax اختبار لراتب عشوائي أي اختبار ثاني فقط للتأكد. - الآن ماعلينا سوى تعريف متحول (object) من هذا الاختبار واستدعاء تابعي الاختبار منه، ننشأ ملف index.php داخل مجلد tests حيث سنضع في هذا الملف استدعاء الاختبارات سواء لهذا الاختبار أم لغيره من الاختبارات القادمة، داخل الملف نكتب:
<?php // Salary class testing // include salary test class require_once 'salary_test.php'; // run the test $test = new TestSalary('Testing Salary'); $test->run(new HtmlReporter()); ?>هل تذكرون name في تابع البناء للاختبار التي قلت أننا سنتكلم عنها بعد قليل، هاهي Testing Salary، بحيث عندما نستدعي ملف index في المتصفح نعلم أن هذا الاختبار هو لصنف الراتب.
- عندما نستدعي ملف index من المتصفح (طبعاً المشروع موجود بالسيرفر المحلي) نحصل على:

بإمكانكم تحميل المشروع:
CRM (307)
















شكرا لك استاذ خالد جزاك الله خيرا .
بانتظار المزيد .
أهلاً بالأستاذ بسام طمني اشتغل معك الكود؟
ممتاز الدرس وجزاءك الله خيرا
1- ايه الفائدة من هذا الاختبار طلما انك بتكتب الكود وبتعمل اختبار على الصفحات الخاصة بك انا لا اقصد الاساءة ولكن اريد فائدة غير موجوده فى الطريقة العادية
2- انا ارسلت لك ايميل ارجوا الرد عليه
1- أي طريقة عادية أخي الكريم؟ لم أفهم النقطة الأولى بشكل جيد!
2- تم
اقصد عند التنفيد
عند الضغط run
لايوجد بالسكربت كله شي اسمه run!!!
اعذرني ولكن شكلو مخي سميك أو لم توضح فكرتك بشكل جيد!
يا أخ على لنصل لفائده الموضوع ستضر للمرور على مفاهيم متعلقه بال Unit Testing و ال Automated Regression Testing والاتجاه حاليا فى ال TDD وكلها مفاهيم تبع ال Software Engineering تحتاج من اخونا خالد صفحات توضيح لذلك اقترح عليك البحث فى هذه النقاط
شكراً لك وبالفعل لايدرك أهميتها إلا من عمل بها وقرأ عنها
غير مممكن !!
صدق او لاتصدق كنت على وشك وضع احد الدروس عن نفس الموضوع !
لكنى وعن نفسى اعتقد ان هناك شئ مهم جدا
استخدام ide مثل netbeans والتزام قواعد الكود النظيف قد يوفر كل شئ
أكيد ولذلك طرحت موضوع كتاب الكود النظيف قبل هذا! ولكن لاشيء يغني عن الاختبارات
السلام عليكم
اولا اشكرك جدا على هذه التدوينة ولكن اريد منك طلب اود منك الاهتمام به وهو ان تتمكن مو وضع css خاص بالطباعة لانى احب احتفظ بتدويناتك على الورق واقرائها من وقت لأخر لكن التنسيق فى الطباعة غير مظبوط وانا حقيقي معجب بتدويناتك واتمنى ان تكثر منها
وعليكم السلام ورحمة الله
سأعمل عليها في القريب العاجل أخي الكريم وشكراً للتنبيه.
تم تركيب إضافة الطباعة مع بعض التعديلات والآن جاهزة لاستخدامك لها، أرجو أن تستفاد منها وشكراً على التنيبه.