تكرار السؤال: …
الإجابة المختصرة
يقسم الاختبارات إلى: Unit Tests سريعة ورخيصة في القاعدة (70%)، Integration Tests في الوسط (20%)، و End-to-End UI Tests شاملة وبطيئة في القمة (10%).
الشرح
تركز اختبارات الوحدة (Unit Tests) على فحص منطق الـ ViewModel والـ Use Cases والـ Repositories وتعمل بسرعة فائقة على الـ JVM المحلي. تركز اختبارات التكامل (Integration Tests) على فحص تفاعل المكونات معًا كقواعد بيانات Room. أما اختبارات الـ UI (End-to-End) فتتحقق من تجربة المستخدم الحقيقية على محاكي أو جهاز حقيقي وتعتبر الأبطأ والأكثر حساسية للأعطال (Flaky).
مثال بالكود
// Unit Test سريع يعمل على JVM دون الحاجة لجهاز أو محاكي:
@Test
fun calculateDiscount_returnsCorrectValue() {
val calculator = PriceCalculator()
val total = calculator.applyDiscount(100.0, 0.1)
assertEquals(90.0, total, 0.001)
}أخطاء شائعة
- الاعتماد الكامل على اختبارات الـ UI المعقدة وإهمال اختبارات الوحدة السريعة، مما يجعل عملية الـ CI/CD شديدة البطء وغير مستقرة.