使用預測測試規則自動管理虛擬裝置

projectedtestrule、虛擬裝置管理

適用的 XR 裝置
這份指南可協助您為這類 XR 裝置打造體驗。
音訊和螢幕眼鏡

如果程式碼依附於實體硬體,就難以自動執行測試。舉例來說,您可能需要手動連線及中斷實體裝置,才能驗證連線狀態。音訊眼鏡和螢幕眼鏡的類型功能裝置狀態各不相同,因此這項挑戰可能更加複雜。如要測試這組多樣化的案例,請使用「預測測試規則」API,自動設定及管理預測測試環境。程式庫會處理投影裝置的建立、連線狀態和功能驗證,因此您可以專心測試應用程式的核心邏輯。使用這些 API 建構強大的測試套件,不必編寫樣板程式碼。

新增程式庫依附元件

如要使用測試規則,請將測試構件新增至應用程式的 build.gradle 檔案:

Groovy

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 建構的 UI。根據預設,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