أتمتة إدارة الأجهزة الافتراضية باستخدام قواعد الاختبار المتوقّعة

أجهزة XR المشمولة
تساعدك هذه الإرشادات في إنشاء تجارب لهذه الأنواع من أجهزة XR.
نظارات الصوت والعرض

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