ال unit testing أصبح الآن من المتطلبات الأساسية الواجب على المبرمج الإلمام بها ليتم قبوله للعمل فى معظم الشركات , فما هو ؟
إختبار الوحدة : هو عبارة عن دالة إضافية تضعها داخل كل class تقوم بكتابته و مهمتها إختبار عمل أجزاء هذا ال class بالشكل المطلوب و الآداء المرجو منه
فعلى سبيل المثال لدينا class بإسم cars و يوجد به دالة بإسم get_car تأخذ id و تقوم بإرجاع array تحتوى على مواصفات السيارة المطلوبة
إذن عند إختبار هذه الوحده : يتم تمرير قيمة إفتراضية 1 مثلاً ك id و يتم عمل check على ما ترجعه الداله فإن كان من نوع array فإن الدالة تعمل ولا مشكلة فيها
وقد يسأل سائل لماذا أتعب نفسى هكذا ؟؟ يمكننى فقط الذهاب إلى الرابط الخاص بهذه الدالة و تمرير متغير id=1 إلى العنوان مثلاً و لذلك يجب علينا توضيح هذه النقاط :
ماذا إن كان ال class الخاص بك له 20 دالة مترابطه مع بعضها مثلاً , هل لديك الوقت الكافى عند حدوث كل مشكلة أن تقوم بمراجعة ال 20 دالة ؟
ماذا إن قمت بتسليم مشروعك لمطور آخر فى الشركة التى تعمل بها , لماذا تجعل هذا المبرمج يقرأ الكود الخاص بك سطر سطر للبحث عن المشكلة ؟
ماذا إن كانت الدالة تأخذ القيم من خلال post و ليس get ؟
ماذا إن أردت أن تجرب دالة موجوده بداخل model مثلاً .. إن كنت تعمل على MVC pattern ؟ و كما نعلم أن ال models لا تستدعى عبر ال URL
هذه الأسئلة و الإجابة عليها كافية لتجعلك تتجه فى أعمالك لإستخدام ال unit testing . على الأقل فى الأجزاء المعقدة التى فيها إعتمادية كبيره
و هذا مثال توضيحى لتطبيق ال unit testing بإستخدام فريمورك codeigniter 2.x
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
class Home extends CI_Controller { public function test(){ $this->load->library('unit_test'); //$this->unit->active(FALSE); $this->unit->set_test_items(array('test_name', 'result')); // test 1 $test_1 = $this->get_car(1); $expected_result = "is_array"; $test_name = 'get_car'; $this->unit->run($test_1, $expected_result, $test_name); // test 2 $_POST["name"] = "OPEL"; // setting the POST $test_2 = $this->save_car(); $this->unit->run($test_2, "is_bool" , "save_car"); // test 3 $this->unit->run($test_3, "is_int" , "valid_email_format"); echo $this->unit->report(); } public function get_car($id){ return array("car_id"=>$id); } public function save_car(){ $name = $this->input->post("name"); // Getting the POST if($name){ return TRUE; }else{ return FALSE; } } } |
وهذا مثال لخرج عملية الإختبار
Test Name | get_car |
---|---|
Test Datatype | Array |
Expected Datatype | Array |
Result | Passed |
File Name | C:\wamp\www\company_script_v3.0_3.1.x\Script\application\controllers\home.php |
Line Number | 28 |
Notes |
Test Name | save_car |
---|---|
Test Datatype | Boolean |
Expected Datatype | bool |
Result | Passed |
File Name | C:\wamp\www\company_script_v3.0_3.1.x\Script\application\controllers\home.php |
Line Number | 33 |
Notes |
Test Name | valid_email_format |
---|---|
Test Datatype | Integer |
Expected Datatype | int |
Result | Passed |
File Name | C:\wamp\www\company_script_v3.0_3.1.x\Script\application\controllers\home.php |
Line Number | 37 |
Notes |