Tester votre application avec les règles de test ARCore

Appareils XR concernés
Ces conseils vous aident à créer des expériences pour ces types d'appareils XR.
Casques XR
Lunettes XR filaires
Lunettes audio et
à écran

Les applications de réalité augmentée dépendent souvent de situations spécifiques du monde réel pour fonctionner. Par exemple, votre application peut nécessiter une surface détectée, comme une table, pour placer un plateau de jeu virtuel. Pour tester votre application dans différents scénarios, utilisez les API ARCore test rule afin d'écrire des tests dans un environnement de test ARCore contrôlé. Les API gèrent la configuration et l'état de la session, ce qui vous permet de vous concentrer sur le test de la logique principale de votre application.

Ajouter des dépendances de bibliothèque

Pour utiliser la règle de test ARCore, ajoutez ces dépendances au fichier build.gradle de votre application :

Kotlin

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

Groovy

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

Si votre application dépend de XR SceneCore, incluez également la dépendance XR SceneCore testing :

Kotlin

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

Groovy

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

Configurer la règle de test

Dans votre test JUnit, utilisez un lanceur de test AndroidJUnit4 pour configurer un test :

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

À l'étape @Before, configurez votre environnement de test, y compris les autorisations requises et la configuration de la session.

Créer des scénarios de test

Créez un scénario de test pour tester un scénario spécifique. Dans cet exemple, nous testons si un détecteur de gestes de suivi des mains fonctionne avec nos données de test :

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

Un test unitaire comprend souvent les étapes suivantes :

  1. Pour configurer le test, utilisez ArCoreTestRule pour injecter des données de test. Cet objet contient les données d'environnement que votre application lit à partir de la session. Utilisez TestScope.advanceUntilIdle pour vous assurer que le système est prêt à effectuer le test. Dans cet exemple, la main droite est activée et les données de pose sont utilisées pour remplir les données d'articulation de la main.
  2. Exécutez ensuite le test. Votre application n'a pas besoin d'un comportement spécial pour utiliser les données injectées : Session utilise les données qui ont été injectées dans ArCoreTestRule.
  3. Enfin, vérifiez les résultats.

Ressources supplémentaires

Pour en savoir plus sur les tests sur Android, consultez les ressources suivantes :