Mantenha tudo organizado com as coleções
Salve e categorize o conteúdo com base nas suas preferências.
O teste das interações do usuário ajuda a garantir que os usuários não encontrem resultados inesperados
ou tenham uma experiência ruim ao interagir com seu app. Crie o hábito de
criar testes de interface do usuário (IU) se precisar verificar se a
interface do seu app está funcionando corretamente.
Uma abordagem para o teste da IU é fazer com que um testador humano realize uma série de operações
de usuário no app de destino e verifique se ele está se comportando corretamente. No entanto,
essa abordagem manual pode ser demorada e propensa a erros. Uma abordagem mais eficiente
é programar os testes de IU para que as ações do usuário sejam realizadas de maneira
automatizada. A abordagem automatizada permite executar os testes de maneira rápida,
confiável e repetitiva.
Os testes de interface iniciam um app (ou parte dele), simulam interações do usuário e
verificam se o app reagiu corretamente. Eles são testes de integração
que podem variar desde a verificação do comportamento de um pequeno componente até um teste de navegação
grande que atravessa todo o fluxo de usuários. Eles são úteis para verificar
regressões e verificar a compatibilidade com diferentes níveis de API e dispositivos
físicos.
Executar testes de IU
Para executar testes de interface instrumentados usando o Android Studio, implemente o
código de teste em uma pasta de teste do Android separada, src/androidTest/java. O
Plug-in do Android para Gradle cria um app de teste com base no seu código e o
carrega no mesmo dispositivo que o app de destino. No código de teste,
use frameworks de testes de IU para simular interações do usuário no
app de destino, a fim de realizar tarefas de teste que abranjam cenários de uso
específicos.
Também é possível usar o Robolectric para executar testes de interface na JVM.
Configuração de arquitetura e teste
A arquitetura do app precisa permitir que os testes substituam partes dele para testar
duplas, e você precisa usar bibliotecas que fornecem utilitários para ajudar no
teste. Por exemplo, é possível substituir um módulo de repositório de dados por uma versão
na memória que fornece dados determinísticos e falsos para o teste.
Figura 3: teste de uma interface substituindo as dependências por falsos.
A abordagem recomendada para substituir dependências é a injeção de dependências. Você
pode criar seu próprio sistema manualmente, mas recomendamos usar uma estrutura de DI
como o Hilt para isso.
Por que testar interfaces automaticamente?
Um app Android pode ser direcionado a milhares de dispositivos diferentes em vários níveis de API
e formatos. O alto nível de personalização que o SO oferece ao
usuário significa que o app pode ser renderizado incorretamente ou até mesmo falhar em alguns dispositivos.
O teste de interface permite fazer testes de compatibilidade, verificando o comportamento de um app
em diferentes contextos. Talvez você queira executar os testes de interface em dispositivos que variam
das seguintes maneiras:
Nível da API: 21, 25 e 30.
Localidade: inglês, árabe e chinês.
Orientação: retrato, paisagem.
Além disso, os apps precisam verificar o comportamento além dos smartphones. Faça testes em
tablets, dispositivos dobráveis e outros dispositivos. Leia mais sobre como testar diferentes tamanhos
de tela.
Tipos de testes de interface
Esta seção aborda dois tipos de testes de IU:
Os testes de comportamento analisam a hierarquia da interface para fazer declarações sobre as
propriedades dos elementos da interface.
Os testes de captura de tela fazem capturas de tela de uma interface e as comparam com
imagens aprovadas anteriormente.
O conteúdo e os exemplos de código nesta página estão sujeitos às licenças descritas na Licença de conteúdo. Java e OpenJDK são marcas registradas da Oracle e/ou suas afiliadas.
Última atualização 2025-07-27 UTC.
[[["Fácil de entender","easyToUnderstand","thumb-up"],["Meu problema foi resolvido","solvedMyProblem","thumb-up"],["Outro","otherUp","thumb-up"]],[["Não contém as informações de que eu preciso","missingTheInformationINeed","thumb-down"],["Muito complicado / etapas demais","tooComplicatedTooManySteps","thumb-down"],["Desatualizado","outOfDate","thumb-down"],["Problema na tradução","translationIssue","thumb-down"],["Problema com as amostras / o código","samplesCodeIssue","thumb-down"],["Outro","otherDown","thumb-down"]],["Última atualização 2025-07-27 UTC."],[],[],null,["# Automate UI tests\n\nTesting user interactions helps ensure users don't encounter unexpected results\nor have a poor experience when interacting with your app. You should get into\nthe habit of creating user interface (UI) tests if you need to verify that the\nUI of your app is functioning correctly.\n\nOne approach to UI testing is to have a human tester perform a set of user\noperations on the target app and verify that it is behaving correctly. However,\nthis manual approach can be time-consuming and error-prone. A more efficient\napproach is to write your UI tests such that user actions are performed in an\nautomated way. The automated approach lets you run your tests quickly and\nreliably in a repeatable manner.\n\nUI tests launch an app (or part of it), then simulate user interactions, and\nfinally check that the app reacted appropriately. They are integration tests\nthat can range from verifying the behavior of a small component to a large\nnavigation test that traverses a whole user flow. They are useful to check for\nregressions and to verify compatibility with different API levels and physical\ndevices.\n\nRun UI tests\n------------\n\n- To run [instrumented](/training/testing/instrumented-tests) UI tests using Android Studio, you implement your test code in a separate Android test folder - `src/androidTest/java`. The [Android Gradle Plugin](/studio/releases/gradle-plugin) builds a test app based on your test code, then loads the test app on the same device as the target app. In your test code, you can use UI testing frameworks to simulate user interactions on the target app, in order to perform testing tasks that cover specific usage scenarios.\n- You can also use [Robolectric](/training/testing/local-tests/robolectric#ui-testing) to run UI tests on the JVM.\n\nArchitecture and test setup\n---------------------------\n\nThe architecture of your app should let tests replace parts of it for [testing\ndoubles](/training/testing/fundamentals/test-doubles) and you should use libraries that provide utilities to help with\ntesting. For example, you can replace a data repository module with an in-memory\nversion of it that provides fake, deterministic data to the test.\n\n\u003cbr /\u003e\n\n**Figure 3**: Testing a UI by replacing its dependencies with fakes.\n\n\u003cbr /\u003e\n\nThe recommended approach to replace dependencies is dependency injection. You\ncan create your own system [manually](/training/dependency-injection/manual) but we recommend using a DI framework\nlike [Hilt](/training/dependency-injection/hilt-android) for this.\n\nWhy test UIs automatically?\n---------------------------\n\nAn Android app can target thousands of different devices across many API levels\nand form factors, and the high level of customization that the OS brings to the\nuser means your app could be rendered incorrectly or even crash on some devices.\n\nUI testing lets you do *compatibility testing*, verifying the behavior of an app\nin different contexts. You might want to run your UI tests on devices that vary\nin the following ways:\n\n- **API level**: 21, 25, and 30.\n- **Locale**: English, Arabic, and Chinese.\n- **Orientation**: Portrait, landscape.\n\nMoreover, apps should check the behavior beyond phones. You should test on\ntablets, foldables, and other devices. Read more about [testing different screen\nsizes](/training/testing/different-screens).\n\nTypes of UI Tests\n-----------------\n\nThis section covers two types of UI tests:\n\n- [Behavior tests](/training/testing/ui-tests/behavior) analyze the UI hierarchy to make assertions on the properties of the UI elements.\n- [Screenshot tests](/training/testing/ui-tests/screenshot) take screenshots of a UI and compares them with a previously-approved images."]]