تكرار السؤال: …
الإجابة المختصرة
تستخدم ComposeTestRule للبحث في شجرة المعاني (Semantics Tree) ومطابقة العناصر بنصوصها أو دورها والتحقق من التفاعل معها بشكل مستقل عن تفاصيل الرسم الداخلي.
الشرح
لا يمتلك Compose عناصر Views تقليدية يمكن البحث عنها بـ findViewById. بدلاً من ذلك، يولد شجرة Semantics موازية تصف الغرض الوظيفي لكل مكون (لخدمة إمكانية الوصول والاختبارات). تتيح أدوات مثل onNodeWithText و onNodeWithTag التفاعل مع المكونات (performClick) ومزامنة أوقات الرسوم المتحركة آليًا مع خيط الاختبار.
مثال بالكود
class CounterTest {
@get:Rule
val composeTestRule = createComposeRule()
@Test
fun incrementCounter_updatesCountText() {
composeTestRule.setContent {
CounterScreen()
}
composeTestRule.onNodeWithText("العدد: 0").assertIsDisplayed()
composeTestRule.onNodeWithText("زيادة").performClick()
composeTestRule.onNodeWithText("العدد: 1").assertIsDisplayed()
}
}أخطاء شائعة
- الإفراط في وضع modifier.testTag واستخدامها كطريقة وحيدة للبحث، بدلاً من البحث بالنصوص وإمكانية الوصول لضمان جودة تطبيقك لذوي الاحتياجات الخاصة.