projectedtestrule, gerenciamento de dispositivos virtuais
É 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
isDeviceConnectedpara 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
capabilitiespara 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.