Cómo probar tu app con reglas de prueba de ARCore

Dispositivos de realidad extendida correspondientes
Esta guía te ayuda a crear experiencias para estos tipos de dispositivos de realidad extendida.
Visores de realidad extendida
Lentes de realidad extendida con cable
Lentes de audio y
visualización

Las apps de realidad aumentada suelen depender de situaciones específicas del mundo real para funcionar. Por ejemplo, es posible que tu app requiera una superficie detectada, como una mesa, para colocar un tablero de juego virtual. Para probar tu app en diferentes situaciones, usa las APIs de reglas de prueba de ARCore para escribir pruebas en un entorno de prueba de ARCore controlado. Las APIs controlan la configuración y el estado de la sesión, por lo que puedes enfocarte en probar la lógica central de tu app.

Agrega dependencias de bibliotecas

Para usar la regla de prueba de ARCore, agrega estas dependencias al archivo build.gradle de tu app:

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 tu app depende de XR SceneCore, también incluye la dependencia de prueba de 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"
}

Configura la regla de prueba

En tu prueba de JUnit, usa un AndroidJUnit4 ejecutor de pruebas para configurar una prueba:

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

En el paso @Before, configura tu entorno de prueba, incluidos los permisos requeridos y la configuración de la sesión.

Crea casos de prueba

Crea un caso de prueba para probar una situación determinada. En este ejemplo, probamos si un detector de gestos de monitoreo de manos funciona con nuestros datos de prueba:

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

Una prueba de unidades suele contener los siguientes pasos:

  1. Para configurar la prueba, usa ArCoreTestRule para insertar datos de prueba. Este objeto contiene los datos del entorno que tu app lee de la sesión. Usa TestScope.advanceUntilIdle para asegurarte de que el sistema esté listo para realizar la prueba. En este ejemplo, se habilita la mano derecha y se usan los datos de la postura para propagar los datos de la articulación de la mano.
  2. Luego, realiza la prueba. Tu app no necesita un comportamiento especial para usar los datos insertados: Session usa los datos que se insertaron en ArCoreTestRule.
  3. Por último, verifica los resultados.

Recursos adicionales

Para obtener más información sobre las pruebas en Android, consulta los siguientes recursos: