使用 ARCore 测试规则测试应用

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

增强现实应用通常需要依赖特定的现实世界情境才能正常运行。例如,您的应用可能需要检测到桌面等表面才能放置虚拟游戏棋盘。为了针对不同场景测试您的应用,请使用 ARCore 测试规则 API 在受控的 ARCore 测试环境中编写测试。这些 API 会处理会话设置和状态,因此您可以专注于测试应用的核心逻辑。

添加库依赖项

如需使用 ARCore 测试规则,请将以下依赖项添加到应用的 build.gradle 文件中:

Kotlin

dependencies {
    testImplementation("androidx.xr.arcore:arcore-testing:1.0.0-alpha14")
}

Groovy

dependencies {
    testImplementation "androidx.xr.arcore:arcore-testing:1.0.0-alpha14"
}

如果您的应用依赖于 XR SceneCore,还应添加 XR SceneCore 测试依赖项:

Kotlin

dependencies {
    testImplementation("androidx.xr.scenecore:scenecore-testing:1.0.0-alpha15")
}

Groovy

dependencies {
    testImplementation "androidx.xr.scenecore:scenecore-testing:1.0.0-alpha15"
}

设置测试规则

JUnit 测试中,使用 AndroidJUnit4 测试运行程序来设置测试:

@Rule @JvmField val arCoreTestRule = ArCoreTestRule()
private lateinit var activityController: ActivityController<ComponentActivity>
private lateinit var activity: ComponentActivity
private lateinit var testDispatcher: TestDispatcher
private lateinit var testScope: TestScope
private lateinit var session: Session

@Before
fun setUp() {
    testDispatcher = StandardTestDispatcher()
    testScope = TestScope(testDispatcher)
    activityController = Robolectric.buildActivity(ComponentActivity::class.java)
    activity = activityController.get()

    // Set up the activity permissions.
    shadowOf(activity.application).grantPermissions(HAND_TRACKING)

    activityController.create().start().resume()

    val sessionCreateResult = Session.create(activity = activity, coroutineContext = testDispatcher)
    session = (sessionCreateResult as SessionCreateSuccess).session

    // Configure the session.
    session.configure(session.config.copy(handTracking = HandTrackingMode.BOTH))
}

@Before 步骤中,设置测试环境,包括所需的权限和会话配置。

创建测试用例

创建测试用例,以便测试特定场景。在此示例中,我们测试手部跟踪手势检测器是否适用于我们的测试数据:

@Test
fun test_thumbsUp() = runTest(testDispatcher) {
    arCoreTestRule.rightHand.isVisible = true
    arCoreTestRule.rightHand.handJointMap = gestureThumbsUp
    advanceUntilIdle()
    val handState = Hand.right(session)?.state?.value ?: fail("Did not detect a right hand")

    val isThumbsUp = detectThumbsUp(handState)
    assertThat(isThumbsUp).isTrue()
}

单元测试通常包含以下步骤:

  1. 如需设置测试,请使用 ArCoreTestRule 注入测试数据。此对象包含应用从会话中读取的环境数据。使用 TestScope.advanceUntilIdle 确保系统已准备好执行测试。在此示例中,右手已启用,并且姿势数据用于填充手部关节数据。
  2. 然后,执行测试。您的应用无需特殊行为即可使用注入的数据:Session 使用注入到 ArCoreTestRule 中的数据。
  3. 最后,检查结果。

其他资源

如需详细了解如何在 Android 平台上进行测试,请参阅以下资源: