使用投影测试规则自动执行虚拟设备管理

projectedtestrule,虚拟设备管理

适用的 XR 设备
本指南可帮助您为以下类型的 XR 设备打造优质体验。
音频和
显示眼镜

当代码依赖于物理硬件时,很难自动执行测试。例如,您可能需要手动连接和断开实体设备的连接,以验证连接状态。由于音频眼镜和显示眼镜的不同类型功能设备状态各不相同, 因此这项挑战可能会变得更加复杂。如需针对这一系列不同的 情况进行测试,请使用 Projected Test Rule 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 构建的界面。默认情况下, 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 方法中手动重置这些属性。
  • 当您需要专门针对投影到显示眼镜的 activity 验证行为时,请使用 launchTestProjectedDeviceActivity