مدونة الويب 2.0

  • الرئيسية
  • تعريف بالمدونة
  • المصادر
  • تواصل معي
  • أخبار المدونة
  • أفكار
  • إضافات
  • برمجة
  • تصميم
  • تطوير
  • فعاليات
  • كتب
  • لقاءات
  • مدونات عربية
  • مشاريع
  • مهمات
  • مواقع

مقدمة في الاختبارات الآلية

March 3, 2009 - الثلاثاء 08 ربيع الأول 1430 التصنيف: برمجة

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

simpletest-logo

سنقوم سوياً عبر عدة تدوينات لهذا الغرض (الاختبارات الآلية) بإنشاء مشروع صغير لإدارة شؤون شركة صغيرة والموظفين فيها.

ملاحظة: الكود المستخدم للـ PHP 5 فقط
في هذه البداية السريعة سنقوم بالتالي:

  1. نذهب إلى موقع مكتبة SimpleTest لتحميل آخر إصدار منها.
  2. ننشأ مجلد جديد لهذا المشروع الصغير في localhost ونسميه مثلاً crm.
  3. ننشأ مجلد جديد داخل مجلد crm ونسميه tests ونفك ضغط مكتبة SimpleTest فيه بحيث نحصل على crm/tests/simpletest أي داخل مجلد tests يوجد مجلد simpletest الذي يحتوي ملفات المكتبة ومنها autorun.php
  4. داخل مجلد 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;
    	}
    }
    ?>
    
  5. سنكتب الآن الاختبار لذلك الصنف، يمكننا كتابة الاختبار في نفس الملف ولكن من الأفضل دائماً أن ننشأ ملف خاص باختبار كل صنف، داخل مجلد 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 اختبار لراتب عشوائي أي اختبار ثاني فقط للتأكد.

  6. الآن ماعلينا سوى تعريف متحول (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 في المتصفح نعلم أن هذا الاختبار هو لصنف الراتب.

  7. عندما نستدعي ملف index من المتصفح (طبعاً المشروع موجود بالسيرفر المحلي) نحصل على:
    testing_salary
  8. بإمكانكم تحميل المشروع:
    CRM (307)

    شارك هذه التدوينة:
    إضافة 'مقدمة في الاختبارات الآلية' إلى Del.icio.usإضافة 'مقدمة في الاختبارات الآلية' إلى diggإضافة 'مقدمة في الاختبارات الآلية' إلى Technoratiإضافة 'مقدمة في الاختبارات الآلية' إلى Stumble Uponإضافة 'مقدمة في الاختبارات الآلية' إلى Google Bookmarksإضافة 'مقدمة في الاختبارات الآلية' إلى FaceBookإضافة 'مقدمة في الاختبارات الآلية' إلى MySpaceإضافة 'مقدمة في الاختبارات الآلية' إلى Twitterإضافة 'مقدمة في الاختبارات الآلية' إلى FriendFeed
    الوسوم: php, الاختبارات الآلية, برمجة, تكتيك
    أرسل هذه التدوينة لصديق أرسل هذه التدوينة لصديق
    طباعة هذه التدوينة طباعة هذه التدوينة

    إقرأ أيضاً:

    • تنقيح الكود باستخدام PDT + Xdebug
    • أوراق المساعدة
    • الميزات المرتقبة لـ PHP6
    • مستقبل الدروبال
    • طريق البرمجة

13 تعليق في “مقدمة في الاختبارات الآلية”

  1. RedMan: March 3, 2009 - الثلاثاء 08 ربيع الأول 1430 في 11:32 ص

    شكرا لك استاذ خالد جزاك الله خيرا .

    بانتظار المزيد .


  2. خالد: March 3, 2009 - الثلاثاء 08 ربيع الأول 1430 في 11:40 ص

    أهلاً بالأستاذ بسام طمني اشتغل معك الكود؟


  3. على المصرى: March 3, 2009 - الثلاثاء 08 ربيع الأول 1430 في 5:09 م

    ممتاز الدرس وجزاءك الله خيرا

    1- ايه الفائدة من هذا الاختبار طلما انك بتكتب الكود وبتعمل اختبار على الصفحات الخاصة بك انا لا اقصد الاساءة ولكن اريد فائدة غير موجوده فى الطريقة العادية

    2- انا ارسلت لك ايميل ارجوا الرد عليه


  4. خالد: March 3, 2009 - الثلاثاء 08 ربيع الأول 1430 في 5:13 م

    1- أي طريقة عادية أخي الكريم؟ لم أفهم النقطة الأولى بشكل جيد!
    2- تم


  5. على المصرى: March 3, 2009 - الثلاثاء 08 ربيع الأول 1430 في 5:57 م

    اقصد عند التنفيد

    عند الضغط run


  6. خالد: March 3, 2009 - الثلاثاء 08 ربيع الأول 1430 في 6:13 م

    لايوجد بالسكربت كله شي اسمه run!!!

    اعذرني ولكن شكلو مخي سميك أو لم توضح فكرتك بشكل جيد!


  7. Qinq: March 3, 2009 - الثلاثاء 08 ربيع الأول 1430 في 9:07 م

    يا أخ على لنصل لفائده الموضوع ستضر للمرور على مفاهيم متعلقه بال Unit Testing و ال Automated Regression Testing والاتجاه حاليا فى ال TDD وكلها مفاهيم تبع ال Software Engineering تحتاج من اخونا خالد صفحات توضيح لذلك اقترح عليك البحث فى هذه النقاط


  8. خالد: March 3, 2009 - الثلاثاء 08 ربيع الأول 1430 في 9:25 م

    شكراً لك وبالفعل لايدرك أهميتها إلا من عمل بها وقرأ عنها


  9. ahmed-araby: March 4, 2009 - الأربعاء 09 ربيع الأول 1430 في 4:38 م

    غير مممكن !!
    صدق او لاتصدق كنت على وشك وضع احد الدروس عن نفس الموضوع !
    لكنى وعن نفسى اعتقد ان هناك شئ مهم جدا
    استخدام ide مثل netbeans والتزام قواعد الكود النظيف قد يوفر كل شئ :)


  10. خالد: March 4, 2009 - الأربعاء 09 ربيع الأول 1430 في 6:45 م

    أكيد ولذلك طرحت موضوع كتاب الكود النظيف قبل هذا! ولكن لاشيء يغني عن الاختبارات


  11. محمد هشام: April 26, 2009 - الأحد 02 جمادى الأولى 1430 في 8:15 م

    السلام عليكم
    اولا اشكرك جدا على هذه التدوينة ولكن اريد منك طلب اود منك الاهتمام به وهو ان تتمكن مو وضع css خاص بالطباعة لانى احب احتفظ بتدويناتك على الورق واقرائها من وقت لأخر لكن التنسيق فى الطباعة غير مظبوط وانا حقيقي معجب بتدويناتك واتمنى ان تكثر منها :)


  12. خالد: April 28, 2009 - الثلاثاء 04 جمادى الأولى 1430 في 11:51 م

    وعليكم السلام ورحمة الله

    سأعمل عليها في القريب العاجل أخي الكريم وشكراً للتنبيه.


  13. خالد: May 2, 2009 - السبت 09 جمادى الأولى 1430 في 9:19 م

    تم تركيب إضافة الطباعة مع بعض التعديلات والآن جاهزة لاستخدامك لها، أرجو أن تستفاد منها وشكراً على التنيبه.


شاركنا برأيك؟

الرجاء الكتابة باللغة العربية الفصحى، وإذا كنت تريد كتابة سؤال حاول البحث في غوغل أولاً فغالباً ستجد عنده الخبر اليقين.

  • الأكثر قراءة
  • الأحدث
  • الأرشيف
  • تعلم الكيك وتطوير المواقع بالبيت
  • أفضل الأدوات لرفع الملفات
  • تنظيم الوقت البرمجي
  • مقدمة في CakePHP
  • أفكار ومواقع ويب 2 شهيرة
  • لماذا غوغل شريرة!
  • الخطوط العربية
  • هل تريد أن تكسب 1000 دولار؟
  • تصميم قاعدة البيانات
  • مواقع عربية بالدروبال
    1. كتب مطلوبة
    2. إصلاح علة أمنية في دروبال 7.3 و 7.4
    3. حل المشكلة أم الترقيع؟
    4. مراجعة كتاب 50 Tips and Tricks for MongoDB Developers
    5. تعريب الوحدات الإضافية
    6. البرامج العربية
    7. تعريب الدروبال 7 – العد التنازلي للنواة
    8. تعريب الدروبال 7 – اليوم الثالث
    9. تعريب الدروبال 7 – اليوم الثاني
    10. تعريب الدروبال 7 – اليوم اﻷول
    11. تعريب الدروبال 7
    1. يونيو 2011
    2. مايو 2011
    3. أبريل 2011
    4. مارس 2011
    5. فبراير 2011
    6. يناير 2011
    7. ديسمبر 2010
    8. نوفمبر 2010
    9. أكتوبر 2010
    10. أغسطس 2010
    11. مارس 2010
    12. فبراير 2010
    13. يناير 2010
    14. ديسمبر 2009
    15. سبتمبر 2009
    16. أغسطس 2009
    17. يوليو 2009
    18. يونيو 2009
    19. مايو 2009
    20. مارس 2009
    21. فبراير 2009
    22. يناير 2009
    23. ديسمبر 2008
    24. نوفمبر 2008
    25. أكتوبر 2008
    26. سبتمبر 2008
    27. أغسطس 2008
    28. يوليو 2008
    29. يونيو 2008
    • اشترك بآخر الأخبار RSS

      Feeds Counter

      أو

    • أشارك بتعريب دروبال 7

    • أراجع كتب Oreilly

      I review for the O'Reilly Blogger Review Program
    • أفضل هدية تقدمها لي

    • تقنية الطماطم

      I Use the Pomodoro Technique
    • عشرون عام لمشروع اللينكس

      I'll be celebrating 20 years of Linux with
The Linux Foundation!
    • وسوم

      Ajax css IDE jQuery php SEO TinyMCE أخبار المدونة أذكار أطر العمل أفكار أمازون إدارة المحتوى إدارة محتوى إضافات استبيان الأجاكس الأمان الاختبارات الآلية الكيك اللغة العربية برمجة تحديثات تحميل تدوينات رمضان تصميم تطوير تعريب تعلم الكيك وتطوير المواقع بالبيت تكتيك تنظيم الوقت جوائز حديث دروبال دعاية فايرفوكس فرص عمل كتب مسابقات مشاريع مهمات مواقع نصائح هندسة برمجيات وورد بريس

    حول المدونة

    • 2008-2012 مدونة الويب 2.0.
    • يمكنك نقل المحتويات أو اقتباس أي جزء منها ويفضل ذكر المصدر.
    • من الممكن أن تساعدك خريطة الموقع.

    عروض العمل

    • يمكنك أن تناقشني حول عروض العمل للمدونات أو لمواقع الويب 2.0.
    • أيضاً يمكنك استشارتي في وضع التفاصيل لمدونة أو لفكرة مشروع جديد.
    • سيرتي الذاتية على My Linkedin Profile

    تواصل معي

    • خالد الحوراني مطور ويب 2.0
    • تابع أخباري على My Twitter account
    • أو راسلني فوراً

    Switch to our mobile site