增强现实应用通常需要依赖特定的现实世界情境才能正常运行。例如,您的应用可能需要检测到桌面等表面才能放置虚拟游戏棋盘。为了针对不同场景测试您的应用,请使用 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() }
单元测试通常包含以下步骤:
- 如需设置测试,请使用
ArCoreTestRule注入测试数据。此对象包含应用从会话中读取的环境数据。使用TestScope.advanceUntilIdle确保系统已准备好执行测试。在此示例中,右手已启用,并且姿势数据用于填充手部关节数据。 - 然后,执行测试。您的应用无需特殊行为即可使用注入的数据:
Session使用注入到ArCoreTestRule中的数据。 - 最后,检查结果。
其他资源
如需详细了解如何在 Android 平台上进行测试,请参阅以下资源: