Use a API Espresso Device para testar seu app quando o dispositivo passa por mudanças de configuração comuns, como rotação e desdobramento da tela. A API Device do Espresso permite simular essas mudanças de configuração em um dispositivo virtual e executa os testes de forma síncrona, para que apenas uma ação ou declaração de IU aconteça por vez e os resultados do teste sejam mais confiáveis. Se você não tem experiência com testes de interface com o Espresso, consulte a documentação dele.
Para usar a API Espresso Device, você precisa do seguinte:
- Android Studio Iguana ou mais recente
- Plug-in do Android para Gradle 8.3 ou mais recente
- Android Emulator 33.1.10 ou mais recente
- Um dispositivo virtual Android que executa o nível 24 da API ou mais recente
Configurar o projeto para a API Espresso Device
Para configurar seu projeto para oferecer suporte à API Espresso Device, faça o seguinte:
Para permitir que o teste transmita comandos ao dispositivo de teste, adicione as permissões
INTERNET
eACCESS_NETWORK_STATE
ao arquivo de manifesto no conjunto de origemandroidTest
:<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permissions.ACCESS_NETWORK_STATE" />
Ative a flag experimental
enableEmulatorControl
no arquivogradle.properties
:android.experimental.androidTest.enableEmulatorControl=true
Ative a opção
emulatorControl
no script de build do módulo:Kotlin
testOptions { emulatorControl { enable = true } }
Groovy
testOptions { emulatorControl { enable = true } }
No script de build do módulo, importe a biblioteca Espresso Device para o projeto:
Kotlin
dependencies { androidTestImplementation("androidx.test.espresso:espresso-device:1.0.1") }
Groovy
dependencies { androidTestImplementation 'androidx.test.espresso:espresso-device:1.0.1' }
Testar com mudanças de configuração comuns
A API Espresso Device tem várias orientações de tela e estados dobráveis que você pode usar para simular mudanças na configuração do dispositivo.
Testar contra a rotação da tela
Confira um exemplo de como testar o que acontece com o app quando a tela do dispositivo é girada:
Primeiro, para um estado inicial consistente, defina o dispositivo no modo retrato:
import androidx.test.espresso.device.action.ScreenOrientation import androidx.test.espresso.device.rules.ScreenOrientationRule ... @get:Rule val screenOrientationRule: ScreenOrientationRule = ScreenOrientationRule(ScreenOrientation.PORTRAIT)
Crie um teste que defina o dispositivo para a orientação de paisagem durante a execução do teste:
@Test fun myRotationTest() { ... // Sets the device to landscape orientation during test execution. onDevice().setScreenOrientation(ScreenOrientation.LANDSCAPE) ... }
Depois que a tela girar, verifique se a interface se adapta ao novo layout conforme esperado.
@Test fun myRotationTest() { ... // Sets the device to landscape orientation during test execution. onDevice().setScreenOrientation(ScreenOrientation.LANDSCAPE) composeTestRule.onNodeWithTag("NavRail").assertIsDisplayed() composeTestRule.onNodeWithTag("BottomBar").assertDoesNotExist() }
Testar contra a abertura da tela
Confira um exemplo de como testar o que acontecerá com o app se ele estiver em um dispositivo dobrável e a tela se abrir:
Primeiro, chame
onDevice().setClosedMode()
para testar o dispositivo no estado dobrado. Confira se o layout do app se adapta à largura da tela compacta.@Test fun myUnfoldedTest() { onDevice().setClosedMode() composeTestRule.onNodeWithTag("BottomBar").assetIsDisplayed() composeTestRule.onNodeWithTag("NavRail").assetDoesNotExist() ... }
Para fazer a transição para um estado totalmente aberto, chame
onDevice().setFlatMode()
. Confira se o layout do app se adapta à classe de tamanho expandida.@Test fun myUnfoldedTest() { onDevice().setClosedMode() ... onDevice().setFlatMode() composeTestRule.onNodeWithTag("NavRail").assertIsDisplayed() composeTestRule.onNodeWithTag("BottomBar").assetDoesNotExist() }
Especificar quais dispositivos são necessários para os testes
Se você estiver executando um teste que realiza ações de dobramento em um dispositivo que não é
dobrável, o teste provavelmente vai falhar. Para executar apenas os testes que são relevantes
para o dispositivo em execução, use a anotação @RequiresDeviceMode
. O executor de teste
pula automaticamente a execução de testes em dispositivos que não oferecem suporte à
configuração que está sendo testada. É possível adicionar a regra de requisito do dispositivo a cada teste
ou a uma classe de teste inteira.
Por exemplo, para especificar que um teste só pode ser executado em dispositivos que oferecem suporte
à abertura para uma configuração plana, adicione o seguinte código @RequiresDeviceMode
ao teste:
@Test
@RequiresDeviceMode(mode = FLAT)
fun myUnfoldedTest() {
...
}