انتقل إلى المحتوى الرئيسي

MODULE 9 - اختبارات مع Spring Boot

مرحبًا بكم في الوحدة 9! 🧪​

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

هذه الوحدة تعلمك كيفية كتابة اختبارات احترافية تضمن جودة الكود الخاص بك.


🎓 أهداف التعلم​

في نهاية هذه الوحدة، ستكون قادرًا على:

  1. ✅ فهم هرم الاختبارات
  2. ✅ كتابة اختبارات وحدات باستخدام JUnit 5
  3. ✅ استخدام Mockito لمحاكاة التبعيات
  4. ✅ إنشاء اختبارات تكامل باستخدام @SpringBootTest
  5. ✅ اختبار واجهات برمجة التطبيقات REST باستخدام MockMvc
  6. ✅ قياس تغطية الكود

📚 المتطلبات الأساسية​

قبل أن تبدأ هذه الوحدة، يجب أن تكون قد:

  • ✅ أكملت الوحدات من 1 إلى 8
  • ✅ أتقنت بنية الطبقات الثلاث
  • ✅ أنشأت خدمات ومستودعات Spring
  • ✅ مرتاحًا مع واجهات برمجة التطبيقات REST

🗺️ خطة الوحدة​

الجزء النظري (5 فصول)​

الفصل 1: مقدمة في الاختبارات​

المدة: 30 دقيقة

المحتوى:

  • لماذا نختبر؟
  • هرم الاختبارات
  • اختبارات الوحدات مقابل التكامل مقابل E2E
  • TDD و BDD
  • إعداد Maven/Gradle

لماذا هو مهم؟ فهم استراتيجية الاختبار


الفصل 2: اختبارات الوحدات باستخدام JUnit 5​

المدة: 1 ساعة

المحتوى:

  • التعليقات التوضيحية JUnit 5 (@Test, @BeforeEach)، إلخ.
  • التأكيدات (assertEquals, assertTrue, assertThrows)
  • اختبارات المعلمات
  • دورة حياة الاختبارات
  • أفضل الممارسات

لماذا هو مهم؟ أساس جميع الاختبارات


الفصل 3: المحاكاة باستخدام Mockito​

المدة: 1 ساعة

المحتوى:

  • لماذا نحاكي؟
  • @Mock, @InjectMocks, @Spy
  • when().thenReturn()
  • verify() و argument matchers
  • Stubbing والاستثناءات

لماذا هو مهم؟ عزل الوحدات للاختبار


الفصل 4: اختبارات التكامل​

المدة: 45 دقيقة

المحتوى:

  • @SpringBootTest
  • @DataJpaTest للمستودعات
  • @WebMvcTest للمتحكمات
  • TestContainers
  • ملفات تعريف الاختبار

لماذا هو مهم؟ اختبار المكونات معًا


الفصل 5: اختبارات REST API​

المدة: 45 دقيقة

المحتوى:

  • MockMvc بالتفصيل
  • WebTestClient
  • اختبار الاستجابات JSON
  • اختبار الأخطاء والاستثناءات
  • RestAssured (إضافة)

لماذا هو مهم؟ التحقق من نقاط النهاية الخاصة بك


الجزء العملي (3 تمارين)​

TP9.1: اختبارات الوحدات - طبقة الخدمة​

المدة: 1 ساعة و30 دقيقة

الهدف: اختبار طبقة خدمة كاملة

ستقوم بـ:

  • كتابة اختبارات لـ ProductService
  • محاكاة المستودع
  • اختبار الحالات الاسمية والخطأ
  • تحقيق تغطية 80%+

TP9.2: اختبارات التكامل - المستودع​

المدة: 1 ساعة و30 دقيقة

الهدف: اختبار الاستمرارية مع قاعدة بيانات حقيقية

ستقوم بـ:

  • استخدام @DataJpaTest
  • اختبار الاستعلامات المخصصة
  • التحقق من القيود
  • استخدام H2 للاختبارات

TP9.3: اختبارات REST API - المتحكم​

المدة: 1 ساعة و30 دقيقة

الهدف: اختبار REST API بالكامل

ستقوم بـ:

  • استخدام MockMvc
  • اختبار جميع نقاط النهاية CRUD
  • التحقق من الاستجابات JSON
  • اختبار الأمان

📊 المدة الإجمالية​

النوعالمدة
النظرية4 ساعات (5 فصول)
العملي4 ساعات و30 دقيقة (3 تمارين)
الإجمالي8 ساعات و30 دقيقة (~2-3 جلسات)

🎯 ما الذي ستفهمه​

قبل هذه الوحدة​

// أنت تختبر يدويًا باستخدام Postman... 😰
// وبعد كل تعديل:
// "هل ما زال يعمل؟"
// "أخشى أن أكسر شيئًا..."
// "لا أجرؤ على إعادة الهيكلة..."

بعد هذه الوحدة​

@Test
void shouldCalculateOrderTotal() {
// Given
Order order = new Order();
order.addItem(new Item("Laptop", 1000.0, 2));
order.addItem(new Item("Mouse", 50.0, 1));

// When
double total = orderService.calculateTotal(order);

// Then
assertThat(total).isEqualTo(2050.0);
}

// ✅ 150 tests passed in 3.2s
// Coverage: 87%
// Confiance: 100% 😎

ستعرف:

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

🚀 لماذا هذه الوحدة أساسية​

1. الثقة في الكود​

بدون اختبارات:
- "أعتقد أنه يعمل" 🤞
- الخوف من تعديل الكود الموجود
- اكتشاف الأخطاء في الإنتاج

مع الاختبارات:
- "أعلم أنه يعمل" ✓
- إعادة الهيكلة بثقة
- اكتشاف الأخطاء فورًا

2. توثيق حي​

@Test
void userShouldNotBeAbleToWithdrawMoreThanBalance() {
// هذا الاختبار يوثق قاعدة عمل!
Account account = new Account(100.0);

assertThrows(InsufficientFundsException.class,
() -> account.withdraw(150.0));
}

3. مهارة مطلوبة​

عروض العمل في Java:
- "TDD/BDD" ✓
- "JUnit, Mockito" ✓
- "تغطية الكود > 80%" ✓
- "الاختبارات الآلية إلزامية" ✓

🗺️ التقدم في التدريب​

الوحدة 9 = ضمان الجودة قبل النشر!


📖 كيفية التعامل مع هذه الوحدة​

النظرية والعملية معًا​

  1. الفصل 1 (مقدمة) → فهم الاستراتيجية
  2. الفصل 2 (JUnit) + TP9.1 → ممارسة فورية
  3. الفصل 3 (Mockito) → إكمال TP9.1 مع المحاكاة
  4. الفصل 4 (التكامل) + TP9.2 → اختبارات المستودع
  5. الفصل 5 (API) + TP9.3 → اختبارات المتحكم

الوقت الموصى به​

الخيار المكثف (1.5 يوم):

  • اليوم 1 صباحًا: الفصول 1-2 + بداية TP9.1
  • اليوم 1 بعد الظهر: الفصل 3 + نهاية TP9.1
  • اليوم 2 صباحًا: الفصول 4-5 + TP9.2
  • اليوم 2 بعد الظهر: TP9.3

الخيار التدريجي (3 جلسات):

  • الجلسة 1: الفصول 1-2 + TP9.1
  • الجلسة 2: الفصول 3-4 + TP9.2
  • الجلسة 3: الفصل 5 + TP9.3

✅ التقييم الذاتي​

قبل البدء، أجب:

  1. هل تعرف ما هو اختبار الوحدة؟ ☐ نعم ☐ لا
  2. هل استخدمت JUnit من قبل؟ ☐ نعم ☐ لا
  3. هل تعرف المحاكاة؟ ☐ نعم ☐ لا
  4. هل سمعت عن MockMvc؟ ☐ نعم ☐ لا
  5. هل تعرف ما هي تغطية الكود؟ ☐ نعم ☐ لا

بعد الوحدة، يجب أن تجيب "نعم" على الكل!


🎯 الخطوة التالية​

جاهز لكتابة اختبارات احترافية؟

➡️ ابدأ مع الفصل 1: مقدمة في الاختبارات


⬅️ العودة إلى خطة الدورة