Mohcin Bounouara's Space
265 subscribers
47 photos
13 videos
8 files
64 links
{فَأَمَّا الزَّبَدُ فَيَذْهَبُ جُفَاءً ۖ وَأَمَّا مَا يَنفَعُ النَّاسَ فَيَمْكُثُ فِي الْأَرْضِ} [الرعد: 17]

خواطر في الدين و الدنيا و هندسة البرمجيات في محاولة لإصلاح نفسي ولعلني اجعل لنفسي أثرا في إصلاح الاخرين.. على قلتهم، لعلنا نلقى الله بهذا.
Download Telegram
حول ال Test Driven Development

كانت لدي تجربة بسيطة في TDD و هو جميل جدا، يجعلك تتصور كل السينارويهات المتوقة ك output من الكود الذي كتبته، ولكنه ايضا متعب جدا، و ايضا يجعل الامر ممتع و فيه ايجابيات عديد منها:

- جودة الكود: يساهم في كتابة كود نظيف، قابل للصيانة، وربما خال من الأخطاء.
.

- توثيق للكود: الاختبارات تعمل كتوثيق للكود الخاص بك بطريقة غير مباشرة.

.

- تقليل الأخطاء: اكتشاف الأخطاء في وقت مبكر وهذا ما يقلل تكاليف التصحيح في المستقبل و الموارد البشرية.
.

- فهم افضل للكود من طرف المطورين الجدد الذين سيعملون على المشروع.
.

لكن صراحة هناك الكثر من المشاريع يقول اصحابها انهك يقومون ب TDD لكن غالبا ما يكون TAD test-after development.. بحكم ضيق الوقت و قلة الموارد.

و الله ولي التوفيق

#TDD #هندسة_البرمجيات #تعلم #برمجة #مما_تعلمت
👍21
عند استخدام Laravel Factories في اختباراتك، احرص على التمييز بين make() و create()، فالأمر بالغ الأهمية في سياق اختبارات قواعد البيانات.

- حالة استخدام:
ترغب في اختبار إمكانية إنشاء Category جديدة:

it('can create a category', function () {
$categoryData = CategoryFactory::new()->make()->toArray();

$response = $this->post(route('category.store'), $categoryData);

$this->assertDatabaseHas('categories', [
'name' => $categoryData['name'],
'slug' => $categoryData['slug'],
]);
$response->assertStatus(302);
expect(Category::count())->toBe(1);
});

هذا الاختبار سيؤدي إلى نتيجة خاطئة Assertion Failure في الغالب،، وذلك لأن make() تُنشئ Collection دون حفظه في قاعدة البيانات، ومع استخدام RefreshDatabase تُفقد البيانات بعد عملية إعادة التوجيه التي يقم بها ال Route.

الحل: استبدل make() بـ create():

$categoryData = CategoryFactory::new()->create()->toArray();

- ال make() تُنشئ ال Collection فقط دون حفظه في قاعدة البيانات.
- ال create() تُنشئ Collection وتُخزّنه في قاعدة البيانات مباشرة.

#Laravel #Factories #PHP #Backend #TDD #programming
إنشاء قاعدة بيانات خاصة للاختبارات هو من أفضل الممارسات أثناء تطوير تطبيقات عموما، حيث يضمن عدم التأثير على بياناتك الحقيقية ويوفر بيئة نظيفة لتجربة الكود واكتشاف الأخطاء.

في laravel إليك كيف تقوم بذلك:

الخطوات:
إنشاء قاعدة بيانات جديدة للاختبارات،

كيف؟

انشاء و تعديل ملف .env.testing ليحتوي على إعدادات قاعدة البيانات الجديدة، الذي ستكون قد أنشأتها. لا تحتاج لان تملئها بأي table، ال php artisan migrate --env=testing ستقوم اوتوماتيكيا بملأ قاعدة بيانات الاختبارات بال migrations الموجودة لديك.

ما الذي تكسبه من هذه الطريقة؟

- عزل بيانات الاختبار عن بيانات التطوير والإنتاج.

- تشغيل الاختبارات بأمان دون القلق من حذف أو تعديل بيانات حقيقية.

- تسريع وتسهيل عملية تصحيح الأخطاء

- إنشاء بيئة مخصصة للاختبار يمكن إعادة ضبطها بسهولة

#Laravel #TDD #testing #php
👍3👌1
مرة أخرى؛ اكتب الـ Unit Tests، أو حتى استخدم ال AI لكتابتها،، ستحتاج في النهاية إلى جعل الاختبارات تمر بنجاح وتصحيح أخطاء الذكاء الاصطناعي لو وجدت.. ومن خلال هذه العملية ستربح الآتي:

- فهم أعمق لل function/class/behavior الذي تريد كتابته/كتابة test له في حالة عدم استخدامك لل TDD، وطريقة اختباره بشكل أفضل.

- اكتشاف الـ bugs مبكرًا قبل الوصول إلى ال production.

- تعلم التفكير في مختلف السيناريوهات المحتملة.

- اكتساب خبرة في ال testing داخل الـ framework أو لغة البرمجة التي تستخدمها.

- معرفة كيفية عمل mocking لل data وكيفية تنفيذ request/response داخل الاختبارات.

- تطوير مهاراتك في كتابة ال assertions.


وهكذا.. في الطريق ستجد أن مجرد كتابة الاختبارات هي عملية تعلمية متكاملة في الفهم، التفكير، والتطوير.

#testing #tdd #unittests
7