使用 ARCore 测试规则测试应用

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

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

添加库依赖项

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

Kotlin

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

Groovy

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

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

Kotlin

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

Groovy

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

设置测试规则

在您的 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(context = activity, coroutineContext = testDispatcher)
    session = (sessionCreateResult as SessionCreateSuccess).session

    // Configure the session.
    session.configure(Config.Builder(session.config).setHandTracking(HandTrackingMode.BOTH).build())
}

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

创建测试用例

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

@Test
fun test_thumbsUp() = runTest(testDispatcher) {
    arCoreTestRule.rightHandTester.isVisible = true
    arCoreTestRule.rightHandTester.handJointMap = gestureThumbsUp
    advanceUntilIdle()
    val handState = Hand.right(session).state.value

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

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

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

其他资源

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