يصعب إعداد الاختبارات تلقائيًا عندما يعتمد الرمز على أجهزة مادية. على سبيل المثال، قد تحتاج إلى توصيل الجهاز الفعلي وفصله يدويًا للتحقّق من حالات الاتصال. ومع كل الأنواع المختلفة والإمكانات وحالات الأجهزة الخاصة بالنظارات الصوتية والنظارات المزودة بشاشة، يمكن أن يصبح هذا التحدي أكثر تعقيدًا. لاختبار هذه المجموعة المتنوّعة من الحالات، استخدِم واجهات برمجة التطبيقات الخاصة بقواعد الاختبار المتوقّعة لأتمتة عملية إعداد بيئة الاختبار المتوقّعة وإدارتها. تتولّى المكتبة إنشاء الأجهزة المحاكية، وحالات الاتصال، والتحقّق من الإمكانات، ما يتيح لك التركيز على اختبار منطق تطبيقك الأساسي. استخدِم واجهات برمجة التطبيقات هذه لإنشاء مجموعات اختبار قوية بدون كتابة رمز النص النموذجي.
إضافة تبعيات المكتبة
لاستخدام قاعدة الاختبار، أضِف أداة الاختبار إلى ملف build.gradle
في تطبيقك:
أنيق
dependencies {
// JXR Projected testing library
testImplementation "androidx.xr.projected:projected-testing:1.0.0-alpha07"
}
Kotlin
dependencies {
// JXR Projected testing library
testImplementation("androidx.xr.projected:projected-testing:1.0.0-alpha07")
}
إعداد قاعدة الاختبار
لإعداد قاعدة الاختبار الأساسية، أضِف تعليقًا توضيحيًا إلى القاعدة في فئة الاختبار. تتضمّن القاعدة تلقائيًا ربط جهاز معروض وتفعيل إمكاناته المرئية قبل إجراء كل اختبار.
@get:Rule val projectedTestRule = ProjectedTestRule() private val context: Context get() = ApplicationProvider.getApplicationContext() @Test fun testWithConnectedDevice() { val projectedContext = ProjectedContext.createProjectedDeviceContext(context) assertThat(ProjectedContext.isProjectedDeviceContext(projectedContext)).isTrue() }
اختبار سيناريوهات شائعة أخرى
بعد إعداد بيئة الاختبار المتوقّعة باستخدام قاعدة اختبار أساسية، اختبِر سيناريوهات شائعة أخرى لنظّارة الصوت والنظّارة المزودة بشاشة للتحقّق من وظائف تطبيقك.
قطع اتصال جهاز الاختبار
لاختبار طريقة تفاعل تطبيقك عند فقدان الاتصال بالنظارات، استخدِم السمة isDeviceConnected:
@Test fun testDeviceDisconnection() { // manually disconnect the device via the rule projectedTestRule.isDeviceConnected = false assertThrows(IllegalStateException::class.java) { ProjectedContext.createProjectedDeviceContext(context) } }
النقاط الرئيسية حول الرمز
- تعيد القاعدة ضبط خصائص مثل
isDeviceConnectedعلى القيم التلقائية قبل كل اختبار. لست بحاجة إلى إعادة ضبط هذه السمات يدويًا في طرق@After.
اختبار إمكانات الأجهزة المختلفة
يمكن أن تعرض النظارات الذكية واجهات مستخدم تم إنشاؤها باستخدام Jetpack Compose Glimmer. بشكل تلقائي، يفعّل
ProjectedTestRule CAPABILITY_VISUAL_UI. لتحديد الميزات التي يتيحها الجهاز المعروض بدقة، استخدِم المجموعة capabilities. ويفيد ذلك في التأكّد من أنّ تطبيقك يتحقّق بشكل صحيح من توفّر الأجهزة المتوافقة قبل محاولة عرض المحتوى على النظارات.
@Test fun testAppBehaviorWithoutDisplayCapabilities() = projectedTestRule.launchTestProjectedDeviceActivity { activity -> // disable display capability projectedTestRule.capabilities = setOf() runBlocking { // create the controller val controller = ProjectedDeviceController.create(activity) // verify the app recognizes the lack of visual UI support assertThat(controller.capabilities).doesNotContain(ProjectedDeviceController.Capability.CAPABILITY_VISUAL_UI) } }
النقاط الرئيسية حول الرمز
- تعيد القاعدة ضبط خصائص مثل
capabilitiesعلى القيم التلقائية قبل كل اختبار. لست بحاجة إلى إعادة ضبط هذه السمات يدويًا في طرق@After. - عندما تحتاج إلى التحقّق من السلوك الخاص بنشاط من المفترض أن يتم عرضه على النظارات، استخدِم
launchTestProjectedDeviceActivity.