Skip to main content

اختبار الكود واجمالي نسبة تغطية الاختبارات - unit testing and test coverage in Arabic

· 4 min read

img

info

الهدف من unit testing هو ضمان صلاحية الكود في اتمام المهمه المقصود بها اثناء تطوير البرنامج

مطلوب كتابة دالة لمعرفة هل عمر المستخدم اكبر من 18 عام ام لا 
اذا كان اكبر من 18 عام تكون True
واذا كان اقل من 18 عام تكون False

كتابه الداله

img

اختبار الدالة

note

الصحيح ان تكتب الاختبار اولا ثم الكود بعد ذلك لكن قمنا بالعكس للتوضيح فقط

المكاتب المستخدمه لاختبار الكود

نحتاج لمكتبة test كـ dev_dependencies img

كتابة الاختبار

info

في المسار الرئيسي للمشروع داخل ملف test قم بانشاء ملف جديد واكتب فيه الاختبار

note

ملحوظة : اسم ملف الاختبار يجب ان ينتهي ب _test.dart ليكون بالشكل التالي

 |- test
|- is_adult_test.dart
  • بداخل ملف الاختبار دالة main بدون paramters img

AAA Pattern (نمط AAA)

ميكروسوفت بتقترح انك تكتب الاختبار بطريقة AAA

Arrange ثم Act ثم Assert img

كدا اصبح الكود جاهز وال test جاهز فاضل تشغيل ال test لضمان ان الكود سليم بس لازم قبل ماتشغل ال test تكون كاتبة داخل دالة test

img

تشغيل الاختبار

وعلشان تقدر تشغل ال test في اكثر من طريقة 1- عن طريق ال ide سواء vsCode او Android studio 2- عن طريق ال terminal هنستخدم ال terminal في باقي الشرح الامر المستخدم هو flutter test ودي النتيجة بعد التشغيل ونجاح الاختبار

img

info

حتي الان انت معتمد علي الشرح , توقف وجرب بنفسك اكتب اختبار لو العمر اقل من 18 هيكون الناتج false ممكن تكون الدالة الي كتبناها دائما بترجع true بغض النظر عن العمر واحنا محتاجين تتاكد في الحالين ال true و ال false

في اخر المقال هتلاقي المشروع علي GitHub لو احتجت مساعدة

المثال الثاني

مطلوب بناء داله تقوم بحساب ناتج القسمة بين متغيرين  x , y
وفي حاله ان احدي الرقمين قيمته اقل من صفر يكون الناتج صفر
tip

الافضل تعمل بنفسك وتشوف الخطا عندك ايه لكن هنمشي خطوه بخطوة بردو للتوضيح المرادي هنكتب ال test الاول ثم الكود

img

بعد كتابة ال test هنكتب كود الدالة نفسها

img

ودي النتيجة بعد تشغيل الامر flutter_test

img

نسبة التغطية - test coverage

المقصود بيه هل التست الي انت كتبتة للكود شغل الكود كله واختبره كله ولا في حجات انت مختبرتهاش مثلا في if else ودايما بينفذ ال if والتستات عمرها مكان فيها test case بتدخل في else علشان تختبرها

وده بيكون نسبة مئوية % لو بتختبر مشروع بفلاتر واختبرت الكود كله نسبتك هتكون 60% تقريبا لانك مستخدم كود من فلاتر ومشغلتش التست بتاعه وده طبيعي وعادي لو بتعمل برنامج cli او مكتبة ومش معتمد علي مصدر خارجي هتقدر ال coverage بتاعتك توصل ل 100%

ازاي اعرف قيمة ال coverage ؟ الامر هيكون flutter test --coverage ده هيطلعلك ملف فيه تقرير التغطية

ومحتاج تستخدم extenstions ل vs code او android studio علشان تعرف منه الاجمالي كام في المئة %

مثال في vscode

img وسبب ان التغطية كانت 85.7% هو اني عملت غلط وانا بكتب كود دالة القسمة واستخدمت && and والصح اني استخدم || or لان المطلوب كان اذا كان x او اذا كان y وهنا vscode بيوضحلي ان الاختبارات مدخلتش هنا ابدا

img

لما نصلحها ونشغل الاختبارات تاني img

كدا كانت التغيطة 100% لكن ال tests فيها 3 فشلو ونستنج هنا ان لو التغطية كانت عالية مش شرط ان الاختبارات نجحت لازم نتاكد دائما من الاثنين

وده الشكل النهائي بعد كتابة دالة القسمة بطريقة صحيحة والتاكد منها بال test والتاكد من coverage 100%

img

وفي الاخير الاختبارات (testing) في صناعه السوفت وير اوالبرمجيات مهمه بنفس درجه اهتمام شركات الادوية باختبار دوائها او مصانع السيارات في اختبارات الامان في سيراتها انت بتختبر المنتج الي انت عملته وبتضمنه انه دايما بينفذ المطلوب منه وميطلعش سلوك غريب

tip

مكتبة زي riverpod فيه تقريبا 13 الف سطر كود في الاختبارات بس (المصدر)

ممكن تستفاد من ال test مع ال CI / CD وتوفر بيئة عمل مستقرة بشكل كبير وتضمن ان ميطلعش من الكود اي اخطا غير متوقعة نهائيا وهتقدر تزود الانتجاية وتقلل التكاليف بشكل ملحوظ

مصادر ومكاتب متعلقه بالموضوع :