Automatizar o gerenciamento de dispositivos virtuais com regras de teste projetadas

projectedtestrule, gerenciamento de dispositivos virtuais

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

É difícil automatizar testes quando o código depende de hardware físico. Por exemplo, talvez seja necessário conectar e desconectar manualmente o dispositivo físico para verificar os estados de conexão. Com todos os diferentes tipos, recursos e estados de dispositivo dos óculos de áudio e de tela, esse desafio pode ficar ainda mais complexo. Para testar esse conjunto diversificado de casos, use as APIs da regra de teste projetado para automatizar a configuração e o gerenciamento de um ambiente de teste projetado. A biblioteca processa a criação de dispositivos projetados, os estados de conexão e a verificação de recursos para que você possa se concentrar em testar a lógica principal do app. Use essas APIs para criar conjuntos de testes robustos sem escrever código boilerplate.

Adicionar dependências de biblioteca

Para usar a regra de teste, adicione o artefato de teste ao arquivo build.gradle do app:

Groovy

dependencies {
// JXR Projected testing library
testImplementation "androidx.xr.projected:projected-testing:1.0.0-alpha07"
}

Kotlin

dependencies {
  // JXR Projected testing library
  testImplementation("androidx.xr.projected:projected-testing:1.0.0-alpha07")
}

Configurar a regra de teste

Para configurar a regra de teste básica, adicione uma anotação a ela na classe de teste. Por padrão, a regra conecta um dispositivo projetado e ativa os recursos visuais dele antes de cada teste ser executado.

@get:Rule
val projectedTestRule = ProjectedTestRule()

private val context: Context
    get() = ApplicationProvider.getApplicationContext()

@Test
fun testWithConnectedDevice() {
    val projectedContext = ProjectedContext.createProjectedDeviceContext(context)

    assertThat(ProjectedContext.isProjectedDeviceContext(projectedContext)).isTrue()
}

Teste outros cenários comuns

Agora que você configurou o ambiente de teste projetado com uma regra básica, teste outros cenários comuns para óculos de áudio e de exibição para verificar a funcionalidade do app.

Desconexão do dispositivo de teste

Para testar como o app reage quando a conexão com os óculos é perdida, use a propriedade isDeviceConnected:

@Test
fun testDeviceDisconnection() {
    // manually disconnect the device via the rule
    projectedTestRule.isDeviceConnected = false

    assertThrows(IllegalStateException::class.java) {
        ProjectedContext.createProjectedDeviceContext(context)
    }
}

Pontos principais sobre o código

  • A regra redefine propriedades como isDeviceConnected para os valores padrão antes de cada teste. Não é necessário redefinir manualmente essas propriedades nos métodos @After.

Testar diferentes recursos do dispositivo

Os óculos de exibição podem mostrar interfaces criadas com o Glimmer do Jetpack Compose. Por padrão, o ProjectedTestRule ativa CAPABILITY_VISUAL_UI. Para definir exatamente o que o dispositivo projetado oferece suporte, use o conjunto capabilities. Isso é útil para verificar se o app confere corretamente o suporte de hardware antes de tentar projetar conteúdo nos óculos.

@Test
fun testAppBehaviorWithoutDisplayCapabilities() = projectedTestRule.launchTestProjectedDeviceActivity { activity ->
    // disable display capability
    projectedTestRule.capabilities = setOf()

    runBlocking {
        // create the controller
        val controller = ProjectedDeviceController.create(activity)

        // verify the app recognizes the lack of visual UI support
        assertThat(controller.capabilities).doesNotContain(ProjectedDeviceController.Capability.CAPABILITY_VISUAL_UI)
    }
}

Pontos principais sobre o código

  • A regra redefine propriedades como capabilities para os valores padrão antes de cada teste. Não é necessário redefinir manualmente essas propriedades nos métodos @After.
  • Quando você precisar verificar o comportamento especificamente para uma atividade que deve ser exibida em óculos, use launchTestProjectedDeviceActivity.