/ Android

Como fazer testes de UI no Android utilizando TDD e Espresso

O que é o Espresso ??

O Espresso é um framework de testes fornecido pelo Android Testing Support Library. Ele provê APIs para escrever testes de UI e simular a interação do usuário com um único aplicativo. Com o Espresso podemos rodar testes em versões do Android 2.2 (API level 8) ou superiores.

Criando o projeto

Abra o Android Studio, clique em [Start a new Android Studio project] e coloque as informações básicas do projeto:

Project Basic Informations


Agora selecione a versão do SDK para o projeto e clique em [Next]. Utilizaremos a API 10 (Android 2.3.3 Gingerbread), como versão mínima.:


Android API Version


No Android uma Activity é basicamente uma classe gerenciadora de UI (User Interface), como nossa intenção é criar testes básicos com o Espresso, não precisamos criar uma Activity complexa, nesse caso selecione Blank Activity, clique em [Next] e depois em [Finish] conforme ilustrado na imagem abaixo:


Android Activity Creation

Adicionando as dependências

Agora iremos adicionar as dependências do Gradle necessárias para rodar o Espresso. Abra o arquivo build.gradle e adicione as seguintes linhas:

androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2'
androidTestCompile 'com.android.support.test:runner:0.3’

Precisamos definir quem será o responsável por executar os testes, com o arquivo build.gradle ainda aberto, adicione a seguinte linha dentro de defaultConfig:

testInstrumentationRunner “android.support.test.runner.AndroidJUnitRunner"

Criando configuração de teste no Android Studio

No menu clique em [Run] -> [Edit Configurations…].

Agora clique em [+] -> [Android Tests].

Em Module selecione app.

Em Specific instrumentation runner (optional) coloque android.support.test.runner.AndroidJUnitRunner.

Agora em Target Device selecione o dispositivo que você está usando para rodar a aplicação, seja um emulador como o Genymotion ou seu dispositivo físico que esteja conectado por USB.

Criando o primeiro teste

Crie uma classe com o nome de MainActivityTest dentro do folder androidTest.

Precisamos informar que o teste utilizará o AndroidJUnit4, para isso, no início da classe adicione:

@RunWith(AndroidJUnit4.class)

Agora precisamos definir qual será o tamanho dos testes, como nosso primeiro teste será bem simples podemos defini-lo como pequeno adicionando a seguinte linha:

@SmallTest

Vamos adicionar uma Rule informando qual Activity iremos testar, dentro da classe adicione a seguinte linha:

@Rule
public ActivityTestRule<MainActivity> mainActivityRule = newActivityTestRule<>(MainActivity.class);

Agora que temos a classe que testa a MainActivity toda configurada, podemos partir para a criação dos testes. Queremos que a tela principal do nosso aplicativo exiba a mensagem "Welcome to TDD with Espresso”.
Vamos criar um teste que verifica se o texto está presente na tela, o código do teste ficará bem parecido com o seguinte:

@Test
public void shouldShowWelcomeText(){
 onView(withText("Welcome to TDD with Espresso")).check(matches(isDisplayed()));
}

Você pode conferir uma lista de métodos do Espresso na documentação do Google.

Espresso Commands

Executando o primeiro teste (Ciclo TDD: Red)

Agora clique no menu [Run] > [Run…] e selecione a configuração de execução que você criou no começo do artigo. Nessa etapa, o seu teste deve ter falhado.

TDD Red

Exibindo o texto na tela (Ciclo TDD: Green)

Agora precisamos editar a aplicação para que exiba a mensagem de boas vindas, para isso abra o arquivo strings.xml que fica dentro do folder values e adicione a seguinte linha:

<string name="welcome_text">Welcome to TDD with Espresso</string>

Abra o arquivo activity_main.xml e adicione um TextView com o valor que acabamos de criar no arquivo strings.xml. O código adicionado deverá ser igual ao seguinte:

<TextView android:text="@string/welcome_text" android:layout_width=“wrap_content" android:layout_height="wrap_content" />

Execute novamente o teste, que dessa vez deverá passar :)

TDD Green

Refactoring (Ciclo TDD: Blue)

Agora é hora de fazer um refactor do código, um possível refactor que podemos fazer é remover o texto hello_world que foi adicionado no processo de criação do projeto. Abra o arquivo strings.xml e remova a linha que contém a string “Hello World”, agora abra o arquivo activity_main.xml e remova o TextView que contém a mesma string mencionada anteriormente:

<TextView android:text="@string/hello_world" android:layout_width="wrap_content" android:layout_height="wrap_content" />

O Refactor que acabamos de fazer na verdade não está muito relacionado ao teste que acabamos de escrever, coloquei apenas para demonstrar o terceiro passo do ciclo do TDD que consiste na refatoração do que foi escrito anteriormente.

Você pode baixar o código completo do projeto em meu Github.

Um agradecimento especial ao Lucas Avila, Luiza Nunes e Ramon Gonçalves por terem feito a revisão do artigo.

Referências

https://code.google.com/p/android-test-kit/wiki/Espresso
https://developer.android.com/tools/testing/testing_android.html
https://developer.android.com/training/testing/ui-testing/espresso-testing.html

Como fazer testes de UI no Android utilizando TDD e Espresso
Share this