Por que o Android Testing?
Android é o maior sistema operacional do mundo. Ao mesmo tempo, o Android está fragmentado. há muitos dispositivos e versões do Android com os quais seu aplicativo deve ser compatível.
Não importa quanto tempo você investe em design e implementação, erros são inevitáveis e bugs aparecerão.
Neste tutorial, você aprenderá-
- Por que o Android Testing?
- Estratégia de teste do Android
- Testes de unidade
- Testes de integração
- Testes operacionais
- Testes de sistema
- TESTE ANDROID automatizado
- Estrutura de teste Android
- Estrutura de teste Robolectric
- Mitos do teste Android
- Práticas recomendadas em testes Android
Estratégia de teste do Android
Uma estratégia de teste de Android correta deve incluir o seguinte
- Teste de unidade
- Teste de integração
- Teste Operacional
- Teste de Sistema
Testes de unidade
Os testes de unidade incluem conjuntos de um ou mais programas projetados para verificar uma unidade atômica do código-fonte, como um método ou uma classe.
A plataforma Android vem com a estrutura Junit 3.0 pré-integrada. É uma estrutura de código aberto para automatizar o Teste de Unidade. O Android Testing Framework é uma ferramenta poderosa para o desenvolvedor escrever o programa de teste de unidade eficaz.
A integração da estrutura Android e JUnit
Uma adição aos testes de unidade são os testes de interface do usuário (IU). Esses testes estão relacionados aos componentes de IU do seu aplicativo de destino. Os testes de IU garantem que seu aplicativo retorne a saída de IU correta em resposta à sequência de ações do usuário no dispositivo.
Ações comuns da IU do usuário no aplicativo
A maneira comum de realizar testes de IU no dispositivo é a instrumentação Android. Mas isso tem problemas de desempenho. Uma das melhores ferramentas para conduzir testes de IU no Android é o Robotium.
Testes de integração
No Teste de Integração, todos os módulos testados por unidade são combinados e verificados. No Android, os testes de integração geralmente envolvem a verificação da integração com componentes do Android, como teste de serviço, teste de atividade, teste de provedor de conteúdo, etc.
Tipos de teste de integração no Android
Existem muitos frameworks de teste usados para realizar testes de integração para Android, como Troyd, Robolectric, Robotium.
Testes operacionais
- Operacionais também são chamados de Testes Funcionais ou Testes de Aceitação. Eles são testes de alto nível projetados para verificar a integridade e exatidão da aplicação.
- No Android, FitNesse é uma estrutura de código aberto que facilita a realização de testes operacionais para o aplicativo de destino.
Testes de sistema
No System Testing, o sistema é testado como um todo e a interação entre os componentes, software e hardware é verificada.
No Android, o teste do sistema normalmente inclui
- Testes de GUI
- Testes de usabilidade
- Testes de performance
- Testes de estresse
Na lista acima, o Teste de Desempenho recebe mais foco. Você pode usar ferramentas como o Traceview para conduzir testes de desempenho no Android. Esta ferramenta pode ajudá-lo a depurar seu aplicativo e traçar o perfil de desempenho.
TESTE ANDROID automatizado
Como o Android é fragmentado, o teste em vários dispositivos é necessário. Mas isso também custará dinheiro. O teste automatizado do Android pode ajudar a reduzir custos
Benefícios do teste automatizado do Android
- Reduza o tempo de execução de casos de teste
- Aumente a produtividade do seu processo de desenvolvimento
- Detecção precoce de bug, economize custos com manutenção de software
- Encontre rapidamente e corrija os bugs na implementação
- Garantir a qualidade do software
Vamos estudar os 2 seguintes frameworks
- Estrutura de teste do Android
- Estrutura de teste Robolectric
Estrutura de teste Android
Uma das estruturas de teste padrão para aplicativos Android é a estrutura de teste Android . É uma estrutura de teste poderosa e fácil de usar, bem integrada com as ferramentas do Android SDK.
Arquitetura da estrutura de teste do Android
- O pacote de aplicativos é o seu aplicativo de destino que precisa ser testado
- InstrumentationTestRunner é o executor do Caso de Teste que executa o caso de teste no aplicativo de destino. Inclui:
2a) Ferramentas de teste: Ferramentas SDK para teste de construção. Eles são integrados no Eclipse IDE ou executados como linha de comando.
2b) MonkeyRunner: Uma ferramenta que fornece APIs para escrever programas que controlam um dispositivo ou emulador Android fora do código Android.
- O pacote de teste é organizado em projetos de teste. Este pacote segue a convenção de nomenclatura. Se o aplicativo em teste tem um nome de pacote de "com.mydomain.myapp", então o pacote de teste deve ser "com.mydomain.myapp.test". O pacote de teste inclui 2 objetos como abaixo:
3a) Classes de casos de teste: incluem métodos de teste a serem executados no aplicativo de destino.
3b) Objetos de simulação: inclui dados de simulação que serão usados como entrada de amostra para casos de teste.
Classes de caso de teste Android
Diagrama de classe AndroidTestCase
- TestCase inclui métodos JUnit para executar o teste JUnit
- TestSuite é usado para executar um conjunto de casos de teste
- InstrumentationTestSuite é um TestSuite que injeta Instrumentation em InstrumentationTestCase antes de executá-los.
- InstrumentationTestRunner é o executor do caso de teste que executa o caso de teste no aplicativo de destino.
- AndroidTestCase estende JUnit TestCase. Ele contém métodos para acessar recursos como Contexto de Atividade.
- ApplicationTestCase verifica as classes de aplicativo em um ambiente controlado.
- InstrumentationTestCase verifica um determinado recurso ou comportamento do aplicativo de destino, por exemplo, verificar a saída da IU do aplicativo.
- ActivityTestCase é uma classe base que oferece suporte ao teste das Atividades do aplicativo.
- ProviderTestCase é uma classe para testar um único ContentProvider.
- ServiceTestCase é usado para testar classes de serviço no ambiente de teste. Ele também oferece suporte ao ciclo de vida do serviço.
- SingeLauchActivityTestCase é usado para testar uma única atividade com um InstrumentationTestCase.
- ActivityUnitTestCase
é usado para testar uma única atividade isolada. - ActivityInstrumentationTestCase2
estende a classe JUnit TestCase. Ele conecta você ao aplicativo de destino com a instrumentação. Com esta classe, você pode acessar o componente GUI do aplicativo e enviar evento de UI (pressionamento de tecla ou evento de toque) para a UI.
Abaixo está um exemplo de ActivityInstrumentationTestCase. Ele verifica a operação da IU do aplicativo Calculadora, verifica a exatidão das saídas da IU.
Exemplo de teste ActivityInstrumentationTestCase2
Estrutura de teste Robolectric
Testar usando a estrutura de teste do Android com dispositivo ou emulador é difícil. Construir e executar o teste é lento e exige muito esforço de desenvolvimento. Para corrigir esse problema, há outra escolha - estrutura de teste Robolectric .
A estrutura Robolectric permite que você execute testes Android diretamente na JVM sem a necessidade de um dispositivo ou emulador.
Recursos avançados do Robolectric
Classes de caso de teste Robolectric
Operação de Robolectric
- Conforme mostrado acima, o Robolectric pode realizar as seguintes ações:
- Registre-se e crie uma classe Shadow
- Interceptar o carregamento da classe Android
- Usa javaassist para substituir os corpos do método da classe Android
- Vincular objeto Shadow à classe Android
- Isso permite que o código em teste seja executado sem o ambiente Android.
Outros testes de framework
Além dos frameworks de teste mencionados acima, existem muitos outros frameworks de teste, como:
- Android Junit Report, um executor de teste de instrumentação customizado para Android que gera relatórios XML para integração com outras ferramentas.
- Expresso
- Appium
Mitos do teste Android
Muitas empresas desenvolvem estratégias de teste Android baseadas em equívocos comuns. Esta seção examina alguns mitos e realidades populares dos testes do Android.
Mito nº 1: Todos os dispositivos Android são iguais ... o teste em emuladores é suficiente
Vamos começar com um exemplo simples. Um aplicativo funciona perfeitamente em emuladores, mas em alguns dispositivos reais, ele trava durante a execução
O aplicativo trava durante a execução em um dispositivo real
Emuladores não são suficientes para o seu teste móvel. Você deve testar seu aplicativo em dispositivos reais.
Mito 2: Testar em alguns dispositivos comuns é suficiente
- Em diferentes dispositivos, seu aplicativo parece diferente porque diferentes dispositivos têm diferentes hardwares, tamanhos de tela, memória, etc. Você deve testar seu aplicativo em diferentes dispositivos, versões de sistema operacional, redes de operadoras e locais.
Mito nº 3: o teste exploratório antes do lançamento é suficiente
- Geralmente, em todos os testes, projetamos os casos de teste e os executamos. Porém, no teste exploratório, o design e a execução do teste serão feitos em conjunto.
- No teste exploratório, não há nenhum plano e nenhuma preparação, então o testador faria os testes que ele deseja fazer. Algumas funções serão testadas repetidamente, enquanto algumas funções não serão testadas completamente.
Mito 4: Se houver alguns bugs no aplicativo, os usuários entenderão
- Se o aplicativo não funcionar e tiver bugs, os usuários o desinstalam
- Problemas de qualidade são o primeiro motivo de crítica negativa no Google Play. Isso afeta a sua reputação e você perde a confiança do cliente.
Portanto, é essencial ter uma estratégia de teste de Android adequada em vigor
Práticas recomendadas em testes Android
- Os desenvolvedores de aplicativos devem criar os casos de teste ao mesmo tempo em que estão escrevendo o código
- Todos os casos de teste devem ser armazenados no controle de versão, junto com o código-fonte
- Use integração contínua e execute testes sempre que o código for alterado
- Evite usar emuladores e dispositivos com acesso root