TDD com Android(RED)

  • Rafael Miceli
  • 28 Mar 2015

Neste artigo vou compartilhar a experiência que tive em criar uma aplicação Android usando TDD. Agora o Android Studio traz suporte a testes unitários e isto facilitou muito a criação de testes com Junit. Vou escrever uma feature de login usando o azure como back end, mas tudo vai ser escrito usando test first. Mas antes, como um programa de receitas, vou mostrar as ferramentas que vamos precisar.

###O que vamos precisar

Vamos usar o Android Studio 1.1 e vamos integrar o app com azure. O foco não é o azure, nosso foco é em implementar a feature login usando teste first.

###Preparando o ambiente

Criem um app no Android Studio, um blank template mesmo.

Após o app template ter sido criado, vamos implementar o teste primeiro do nosso app.

A versão 1.1 do Android Studio já cria um template de teste que era o antigo “Intrumentation test”. Vamos remover ele e criar o nosso.

passo 1

Após isso precisamos agora criar nossa estrutura de testes no Android Studio, lembrem-se de mudar a visualização da sua project tab para “Project View”

passo 2

passo 3

Vamos importar o JUnit como nosso framework de testes. Dentro de Gradle Scripts abra o build.gradle(Module app), em nosso objeto dependencies, vamos adicionar uma dependência ao JUnit:

passo 4

Clique em gradle sync que o JUnit vai ser adicionado ao nosso projeto.

passo 5

Agora precisamos mudar o build variants do “Instrumentation Test” para “Unit Test”

passo 6

###Criando o teste

Finalmente! Podemos criar nossa classe de teste!

passo 7

Vamos chama-la de “UserTest”, e nela adicionamos o import ao JUnit:

passo 8

Agora podemos começar a escrever nosso primeiro teste.

Quando escrevemos nossos testes, dar um bom nome para ele é muito importante pois podemos usar nossos testes como documentação para mapear os comportamentos do nosso app, como o Uncle Bob diz “software is about behavior”. Para dar um bom nome lembre também do princípio DAMP (descriptive and meaningful phrases). Não vou entrar em detalhes sobre nomes de testes, pois este é um assunto para muitos debates. Vamos dar o nome:

should_login_user_successfully()

passo 9

####Observação importante

Uma observação sobre nomes. Se seu código ou grande parte dele estiver com as classes de regras de negócios em português, escreva seus testes em português

Vamos rodar nosso teste! para rodá-lo clicamos com o botão direito no método que vamos testar e selecionamos run nome-do-seu-teste, ou usamos o atalho ctrl+shift+F10.

passo 10

Excelente! O teste passou, nosso framework está ok.

passo 15

Continuando, vamos seguir o fluxo do TDD e vamos fazer o teste falhar, para isto vamos também importar mais duas bibliotecas, e vamos implementar o design do nosso login.

passo 14

Ótimo! Agora nosso teste está falhando porque nossa classe “User” e nosso método “login “ não existem. Vamos cria-los:

passo 11

passo 12

Vamos rodar nosso teste novamente.

passo 13

Muito bom! Atingimos a fase Red em nosso fluxo.

No próximo artigo vamos fazer este teste passar e refatora-lo, após isso vocês vão ter uma surpresa!

###Update

Galera, o código para este post se encontra no meu Github

comentarios com Disqus Disqus