使用 ARCore 測試規則測試應用程式

適用的 XR 裝置
這份指南可協助您為這類 XR 裝置打造體驗。
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 裝置上測試,請參閱下列資源: