JUnit Experience

37
Experience Construindo testes unitários usando JUnit 4

description

Uma experiência de implementação de testes unitários usando JUnit 4. Entendendo como testes unitários podem ajudar na evolução do código, e como podemos construindo testes unitários melhores.

Transcript of JUnit Experience

Page 1: JUnit Experience

ExperienceConstruindo testes unitários usando JUnit 4

Page 2: JUnit Experience

Problemas com bugs?

Page 3: JUnit Experience

Testes unitários podem rastreá-los!!!

Page 4: JUnit Experience

O JUnit se preocupa em monitorar comportamentos do código

Page 5: JUnit Experience

Quando um teste falha,…

Page 6: JUnit Experience

é sinal de que precisamos evoluir o código

Page 7: JUnit Experience

Geralmente começamos com testes “felizes”…

Page 8: JUnit Experience

como por exemplo comparar o resultado de um comportamento com um valor esperado…,

Page 9: JUnit Experience

e torcer pra que tudo dê certo!!!

Page 10: JUnit Experience

Testes bem construídos garantem uma evolução segura do software

Page 11: JUnit Experience

Comportamentos estranhos inseridos no código serão rapidamente identificados

Page 12: JUnit Experience

Os casos negativos também são importantes!!!

Page 13: JUnit Experience

O importante é tentar identificar o máximo de cenários possíveis, e representar isso através de testes unitários.

Page 14: JUnit Experience

Não vamos esquecer das Exceptions…

Page 15: JUnit Experience

É importante criar testes que verifiquem a ocorrência de exceções…

Page 16: JUnit Experience

pois se o teste quebrar, temos como mapear a origem do problema.

Page 17: JUnit Experience

À medida que vamos evoluindo o código, os testes começam a ficar um pouco mais volumosos.

Page 18: JUnit Experience

Imagine um teste que cadastra 5 usuários para verificar se eles estão sendo persistidos. Que trabalhera!!!

Page 19: JUnit Experience

Já ouviu falar em Data Builders?

alguns conhecem como Fixture...

Design Pattern responsável por construir objetos de maneira rápida e descritiva

Page 20: JUnit Experience

O código de antes...

E agora cadastrando 5 usuários!!!

Page 21: JUnit Experience

O código…

Mostre-mepor favor!!!

Page 22: JUnit Experience

1- Um objeto encapsulado

2- Um método estático que chama a fixture

3- Um método que retorna o objeto construído

4- Métodos adicionais que 'setam' os atributos no meio do caminho

5- A corrente só termina quando retorna o usuario

Page 23: JUnit Experience

Ainda dá pra emagrecer mais um pouquinho, basta ter um pouco de fé…

Page 24: JUnit Experience

Desse jeito fica bem mais fácil de trabalhar…

reaproveitar isso em outros testes!!!

E o melhor é que ainda dá pra…

Page 25: JUnit Experience

Então chega a hora de começar a dividir responsabilidades…

Queremos implementar o acesso ao banco mas não queremos que o teste se preocupe com isso…

Então vamos deixar isso com o setUp()

Page 26: JUnit Experience

@BeforeClass@Before

@After@AfterClass

Implementam comportamentos para serem utilizados…

- BeforeClass: Antes de iniciar a suite de testes- Before: Antes de executar cada teste- After: Depois de executar cada teste- AfterClass: Depois de finalizar a suite de testes

Page 27: JUnit Experience

Agora temos uma camada de serviço, que implementa comportamentos

sobre Usuario…

uma camada de acesso ao banco de dados, que

persiste as informações…

e um código já bem estruturado e organizado

Page 28: JUnit Experience

Mas pare ai!!!

Page 29: JUnit Experience

Se eu tiver que acessar o banco de dados a cada teste que fizer, será muito demorado…

Page 30: JUnit Experience

Isso não é teste unitário…

Page 31: JUnit Experience

Antes de pensar na integração do sistema, precisamos garantir suas unidades!!!

Page 32: JUnit Experience

Mas então como é que eu faço???

Page 33: JUnit Experience

Gambiarra???

Isso se chama Mock!!!

Não…

Page 34: JUnit Experience

Mock Object é um padrão de

desenvolvimento que simula

comportamentos de objetos

concretos de uma aplicação ou funcionalidade.

Page 35: JUnit Experience

e em vez de acessar o banco de dados, ‘mocamos’ o comportamento com uma lista, ou simplesmente não fazemos nada…

Substituímos o UsuárioDao por um Mock Object compatível…

que sobrescrevetodos os métodos…

Page 36: JUnit Experience

Desta maneira garantimos testes simples e coesos…

E fica mais fácil de manter a qualidade!!!

Page 37: JUnit Experience

Quem sou eu?

Renan Uchôa,

estudante de Engenharia de Software pela Universidade Federal do Pampa,

e Desenvolvedor Java pela uMov.me Tecnologia S.A.