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. 次に、テストを実行します。アプリで挿入されたデータを使用するために特別な動作を行う必要はありません。SessionArCoreTestRule に挿入されたデータを使用します。
  3. 最後に、結果を確認します。

参考情報

Android でのテストの詳細については、次のリソースをご覧ください。