É 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 dispositivos de óculos com áudio e óculos com tela virtual, esse desafio pode se tornar ainda mais complexo. Para testar esse conjunto diversificado de casos, use as APIs Projected Test Rule 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, anote a regra 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() }
Testar outros cenários comuns
Agora que você configurou o ambiente de teste projetado com uma regra de teste básica, teste outros cenários comuns para óculos com áudio e óculos com tela virtual para verificar a funcionalidade do app.
Testar a 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) } }
Principais pontos sobre o código
- A regra redefine propriedades como
isDeviceConnectedpara os padrões antes de cada teste. Não é necessário redefinir manualmente essas propriedades nos métodos@After.
Testar diferentes recursos do dispositivo
Os óculos com tela virtual podem mostrar interfaces criadas com o Jetpack Compose Glimmer. 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 verifica 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) } }
Principais pontos sobre o código
- A regra redefine propriedades como
capabilitiespara os padrões antes de cada teste. Não é necessário redefinir manualmente essas propriedades nos métodos@After. - Quando você precisar verificar o comportamento especificamente de uma Activity projetada para óculos com tela virtual, use
launchTestProjectedDeviceActivity.