App mit ARCore-Testregeln testen

XR‑Geräte, für die der Leitfaden gilt
Dieser Leitfaden hilft Ihnen dabei, Erlebnisse für die folgenden Arten von XR-Geräten zu entwickeln.
XR-Headsets
XR-Brille mit Kabel
Audio- &
Displaybrillen

Augmented Reality-Apps sind oft auf bestimmte reale Situationen angewiesen, um zu funktionieren. Ihre App benötigt beispielsweise eine erkannte Oberfläche wie einen Tisch, um ein virtuelles Spielbrett zu platzieren. Wenn Sie Ihre App in verschiedenen Szenarien testen möchten, können Sie mit den ARCore-Testregel-APIs Tests in einer kontrollierten ARCore-Testumgebung schreiben. Die APIs übernehmen die Einrichtung und den Status der Sitzung, sodass Sie sich auf das Testen der Kernlogik Ihrer App konzentrieren können.

Bibliotheksabhängigkeiten hinzufügen

Wenn Sie die ARCore-Testregel verwenden möchten, fügen Sie der Datei build.gradle Ihrer App die folgenden Abhängigkeiten hinzu:

Kotlin

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

Groovy

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

Wenn Ihre App von XR SceneCore abhängig ist, fügen Sie auch die Abhängigkeit XR SceneCore-Tests hinzu:

Kotlin

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

Groovy

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

Testregel einrichten

Verwenden Sie in Ihrem JUnit-Test einen AndroidJUnit4-Testrunner, um einen Test einzurichten:

@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))
}

Richten Sie im Schritt @Before Ihre Testumgebung ein, einschließlich der erforderlichen Berechtigungen und der Sitzungskonfiguration.

Testläufe erstellen

Testlauf erstellen, um ein bestimmtes Szenario zu testen. In diesem Beispiel testen wir, ob ein Hand-Tracking-Gesten-Detektor mit unseren Testdaten funktioniert:

@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()
}

Ein Unittest umfasst oft die folgenden Schritte:

  1. Verwenden Sie zum Einrichten des Tests ArCoreTestRule, um Testdaten einzufügen. Dieses Objekt enthält die Umgebungsdaten, die Ihre App aus der Sitzung liest. Verwenden Sie TestScope.advanceUntilIdle, um sicherzustellen, dass das System für den Test bereit ist. In diesem Beispiel ist die rechte Hand aktiviert und die Daten zu den Handgelenken werden mit Posedaten gefüllt.
  2. Führen Sie dann den Test durch. Ihre App muss kein besonderes Verhalten aufweisen, um die eingefügten Daten zu verwenden: Session verwendet Daten, die in ArCoreTestRule eingefügt wurden.
  3. Prüfen Sie zum Schluss die Ergebnisse.

Zusätzliche Ressourcen

Weitere Informationen zum Testen auf Android finden Sie in den folgenden Ressourcen: