拡張現実アプリは、特定の現実世界の状況に依存して機能することがよくあります。たとえば、仮想ゲーム盤を配置するために、テーブルなどの検出されたサーフェスが必要になる場合があります。さまざまなシナリオに対してアプリをテストするには、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 でのテストの詳細については、次のリソースをご覧ください。