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
Kabelgebundene XR‑Brillen
Audio- und
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, verwenden Sie die ARCore-Testregel-APIs, um Tests in einer kontrollierten ARCore-Testumgebung zu schreiben. Die APIs verarbeiten die Sitzungseinrichtung und den Status, 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-alpha15")
}

Groovy

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

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

Kotlin

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

Groovy

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

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(context = activity, coroutineContext = testDispatcher)
    session = (sessionCreateResult as SessionCreateSuccess).session

    // Configure the session.
    session.configure(Config.Builder(session.config).setHandTracking(HandTrackingMode.BOTH).build())
}

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

Testfälle erstellen

Erstellen Sie einen Testfall, um ein bestimmtes Szenario zu testen. In diesem Beispiel testen wir, ob ein Hand-Tracking-Gestenerkennungsmodul mit unseren Testdaten funktioniert:

@Test
fun test_thumbsUp() = runTest(testDispatcher) {
    arCoreTestRule.rightHandTester.isVisible = true
    arCoreTestRule.rightHandTester.handJointMap = gestureThumbsUp
    advanceUntilIdle()
    val handState = Hand.right(session).state.value

    val isThumbsUp = detectThumbsUp(handState)
    assertThat(isThumbsUp).isTrue()
}

Ein Einheitentest umfasst oft die folgenden Schritte:

  1. Verwenden Sie zum Einrichten des Tests die 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 bereit ist, den Test auszuführen. In diesem Beispiel ist die rechte Hand aktiviert und Posedaten werden verwendet, um die Daten für das Handgelenk zu füllen.
  2. Führen Sie dann den Test aus. Ihre App benötigt kein besonderes Verhalten, um die eingefügten Daten zu verwenden. Die Session verwendet Daten, die in die ArCoreTestRule eingefügt wurden.
  3. Prüfen Sie abschließend die Ergebnisse.

Zusätzliche Ressourcen

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