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

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

يصعب إعداد الاختبارات تلقائيًا عندما يعتمد الرمز على أجهزة مادية. على سبيل المثال، قد تحتاج إلى توصيل الجهاز الفعلي وفصله يدويًا للتحقّق من حالات الاتصال. ومع كل الأنواع المختلفة والإمكانات وحالات الأجهزة الخاصة بالنظارات الصوتية والنظارات المزودة بشاشة، يمكن أن يصبح هذا التحدي أكثر تعقيدًا. لاختبار هذه المجموعة المتنوّعة من الحالات، استخدِم واجهات برمجة التطبيقات الخاصة بقواعد الاختبار المتوقّعة لأتمتة عملية إعداد بيئة الاختبار المتوقّعة وإدارتها. تتولّى المكتبة إنشاء الأجهزة المحاكية، وحالات الاتصال، والتحقّق من الإمكانات، ما يتيح لك التركيز على اختبار منطق تطبيقك الأساسي. استخدِم واجهات برمجة التطبيقات هذه لإنشاء مجموعات اختبار قوية بدون كتابة رمز النص النموذجي.

إضافة تبعيات المكتبة

لاستخدام قاعدة الاختبار، أضِف أداة الاختبار إلى ملف 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.