يصعب أتمتة الاختبارات عندما يعتمد الرمز على أجهزة مادية. على سبيل المثال، قد تحتاج إلى توصيل الجهاز المادي وفصله يدويًا للتحقّق من حالات الاتصال. مع كل الأنواع المختلفة، الإمكانات، وحالات الأجهزة لنظارات صوتية ونظارات بشاشة عرض، يمكن أن يصبح هذا التحدّي أكثر تعقيدًا. لاختبار هذه المجموعة المتنوّعة من الحالات، استخدِم واجهات برمجة التطبيقات Projected Test Rule لأتمتة إعداد بيئة اختبار مُسقطة و إدارتها. تتولّى المكتبة إنشاء الأجهزة المُسقطة وحالات الاتصال والتحقّق من الإمكانات، ما يتيح لك التركيز على اختبار المنطق الأساسي لتطبيقك. استخدِم واجهات برمجة التطبيقات هذه لإنشاء مجموعات اختبار قوية بدون كتابة رمز النص النموذجي.
إضافة تبعيات المكتبة
لاستخدام قاعدة الاختبار، أضِف عنصر الاختبار إلى ملف 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.