Testar o app com regras de teste do ARCore

Dispositivos XR relevantes
Estas orientações ajudam você a criar experiências para esses tipos de dispositivos XR.
Headsets XR
Óculos XR com fio
Óculos de áudio e
display

Os apps de realidade aumentada geralmente dependem de situações específicas do mundo real para funcionar. Por exemplo, seu app pode exigir uma superfície detectada, como uma mesa, para colocar um tabuleiro de jogo virtual. Para testar seu app em diferentes cenários, use as APIs da regra de teste do ARCore para escrever testes em um ambiente de teste controlado do ARCore. As APIs processam a configuração e o estado da sessão para que você possa se concentrar em testar a lógica principal do app.

Adicionar dependências de biblioteca

Para usar a regra de teste do ARCore, adicione estas dependências ao arquivo build.gradle do app:

Kotlin

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

Groovy

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

Se o app depender do XR SceneCore, inclua também a dependência de teste do XR SceneCore:

Kotlin

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

Groovy

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

Configurar a regra de teste

No seu teste JUnit, use um executor de testes AndroidJUnit4 para configurar um teste:

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

Na etapa @Before, configure seu ambiente de teste, incluindo as permissões e a configuração de sessão necessárias.

Criar casos de teste

Crie um caso de teste para testar um determinado cenário. Neste exemplo, testamos se um detector de gestos de captura de movimentos das mãos funciona com nossos dados de teste:

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

Um teste de unidade geralmente contém as seguintes etapas:

  1. Para configurar o teste, use o ArCoreTestRule para injetar dados de teste. Esse objeto contém os dados do ambiente que seu app lê da sessão. Use TestScope.advanceUntilIdle para garantir que o sistema esteja pronto para realizar o teste. Neste exemplo, a mão direita está ativada, e os dados de postura são usados para preencher os dados de articulação da mão.
  2. Em seguida, faça o teste. Seu app não precisa de um comportamento especial para usar os dados injetados: o Session usa dados que foram injetados no ArCoreTestRule.
  3. Por fim, confira os resultados.

Outros recursos

Para saber mais sobre testes no Android, consulte os recursos a seguir: