SlideShare uma empresa Scribd logo
1 de 37
Baixar para ler offline
Experience
Construindo testes unitários usando JUnit 4
Problemas com bugs?
Testes unitários podem rastreá-los!!!
O JUnit se preocupa em monitorar
comportamentos do código
Quando um teste falha,…
é sinal de que precisamos evoluir o código
Geralmente começamos com testes “felizes”…
como por exemplo comparar o resultado de um
comportamento com um valor esperado…,
e torcer pra que tudo dê certo!!!
Testes bem construídos garantem uma
evolução segura do software
Comportamentos estranhos inseridos no código
serão rapidamente identificados
Os casos negativos também são importantes!!!
O importante é tentar
identificar o máximo de
cenários possíveis, e
representar isso através
de testes unitários.
Não vamos esquecer das Exceptions…
É importante criar testes que verifiquem a
ocorrência de exceções…
pois se o teste quebrar, temos como mapear
a origem do problema.
À medida que vamos
evoluindo o código, os
testes começam a ficar
um pouco mais
volumosos.
Imagine um teste que
cadastra 5 usuários
para verificar se eles
estão sendo persistidos. Que trabalhera!!!
Já ouviu falar em Data Builders?
alguns conhecem
como Fixture...
Design Pattern
responsável por
construir objetos
de maneira rápida e
descritiva
O código de antes...
E agora cadastrando 5 usuários!!!
O código…
Mostre-me
por favor!!!
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
Ainda dá pra emagrecer mais um pouquinho,
basta ter um pouco de fé…
Desse jeito fica bem mais fácil de trabalhar…
reaproveitar isso
em outros testes!!!
E o melhor é que
ainda dá pra…
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()
@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
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
Mas pare ai!!!
Se eu tiver que acessar o banco de dados a
cada teste que fizer, será muito demorado…
Isso não é teste unitário…
Antes de pensar na integração do sistema,
precisamos garantir suas unidades!!!
Mas então como é que eu faço???
Gambiarra???
Isso se chama Mock!!!
Não…
Mock Object é
um padrão de
desenvolvimento
que simula
comportamentos
de objetos
concretos de
uma aplicação ou
funcionalidade.
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 sobrescreve
todos os métodos…
Desta maneira
garantimos
testes simples e
coesos…
E fica mais fácil de manter a qualidade!!!
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.

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

Apresentacao Testes de Unidade
Apresentacao Testes de UnidadeApresentacao Testes de Unidade
Apresentacao Testes de Unidade
 
Testes Unitários
Testes UnitáriosTestes Unitários
Testes Unitários
 
PHPExperience 2016 - Pirâmide de Testes
PHPExperience 2016 - Pirâmide de TestesPHPExperience 2016 - Pirâmide de Testes
PHPExperience 2016 - Pirâmide de Testes
 
Mutant Testing: um mundo para um X-Testing.
Mutant Testing: um mundo para um X-Testing.Mutant Testing: um mundo para um X-Testing.
Mutant Testing: um mundo para um X-Testing.
 
Testes: existe vida antes do TDD
Testes: existe vida antes do TDDTestes: existe vida antes do TDD
Testes: existe vida antes do TDD
 
Testes O que são e para que servem? - LadyTalks
Testes O que são e para que servem? - LadyTalksTestes O que são e para que servem? - LadyTalks
Testes O que são e para que servem? - LadyTalks
 
Testes de Unidade, por que você deve começar a fazer? - Javaneiros
Testes de Unidade, por que você deve começar a fazer? - JavaneirosTestes de Unidade, por que você deve começar a fazer? - Javaneiros
Testes de Unidade, por que você deve começar a fazer? - Javaneiros
 
PHP Expericence 2015 - Testes Unitários - Existe vida antes do TDD
PHP Expericence 2015 - Testes Unitários - Existe vida antes do TDDPHP Expericence 2015 - Testes Unitários - Existe vida antes do TDD
PHP Expericence 2015 - Testes Unitários - Existe vida antes do TDD
 
Pensando em java univali turbinando seus testes
Pensando em java univali   turbinando seus testesPensando em java univali   turbinando seus testes
Pensando em java univali turbinando seus testes
 
Testes unitários e Mocks
Testes unitários e MocksTestes unitários e Mocks
Testes unitários e Mocks
 
Testes de unidade - Conhecendo e aplicando
Testes de unidade - Conhecendo e aplicandoTestes de unidade - Conhecendo e aplicando
Testes de unidade - Conhecendo e aplicando
 
Teste Estrutural usando a ferramenta Jabuti
Teste Estrutural usando a ferramenta JabutiTeste Estrutural usando a ferramenta Jabuti
Teste Estrutural usando a ferramenta Jabuti
 
JUnit - Selenium
JUnit - SeleniumJUnit - Selenium
JUnit - Selenium
 
Testes - Para que?
Testes - Para que?Testes - Para que?
Testes - Para que?
 
Teste baseado em modelos
Teste baseado em modelosTeste baseado em modelos
Teste baseado em modelos
 
Femug #9 iniciando com testes em node js!
Femug #9   iniciando com testes em node js!Femug #9   iniciando com testes em node js!
Femug #9 iniciando com testes em node js!
 
JUnit
JUnitJUnit
JUnit
 
Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1
 
Testes de Sistema
Testes de SistemaTestes de Sistema
Testes de Sistema
 
Android testing PT-BR
Android testing PT-BRAndroid testing PT-BR
Android testing PT-BR
 

Semelhante a JUnit Experience

Por que testar é importante e algumas boas práticas
Por que testar é importante e algumas boas práticasPor que testar é importante e algumas boas práticas
Por que testar é importante e algumas boas práticas
Lucas Caton
 
Qualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnitQualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnit
Domingos Teruel
 
Django Object factory
Django Object factoryDjango Object factory
Django Object factory
italomaia
 

Semelhante a JUnit Experience (20)

A importância dos testes unitários: do código legado ao pipeline de testes em...
A importância dos testes unitários: do código legado ao pipeline de testes em...A importância dos testes unitários: do código legado ao pipeline de testes em...
A importância dos testes unitários: do código legado ao pipeline de testes em...
 
Tdd x testes unidades
Tdd x testes unidadesTdd x testes unidades
Tdd x testes unidades
 
Testes E2E em Cypress com JS
Testes E2E em Cypress com JSTestes E2E em Cypress com JS
Testes E2E em Cypress com JS
 
Descomplicando os mocks
Descomplicando os mocksDescomplicando os mocks
Descomplicando os mocks
 
Testes de Unidade com Junit
Testes de Unidade com JunitTestes de Unidade com Junit
Testes de Unidade com Junit
 
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
 
Sistemas para o Mundo Real
Sistemas para o Mundo RealSistemas para o Mundo Real
Sistemas para o Mundo Real
 
Teste de Software
Teste de SoftwareTeste de Software
Teste de Software
 
Por que testar é importante e algumas boas práticas
Por que testar é importante e algumas boas práticasPor que testar é importante e algumas boas práticas
Por que testar é importante e algumas boas práticas
 
O que é Teste de Software?
O que é Teste de Software?O que é Teste de Software?
O que é Teste de Software?
 
Testes de Sofware
Testes de SofwareTestes de Sofware
Testes de Sofware
 
Qualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnitQualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnit
 
Qualidade e Testes de Software
Qualidade e Testes de SoftwareQualidade e Testes de Software
Qualidade e Testes de Software
 
[MTC 2021] Criando testes automatizados rápidos e robustos com cypress - Walm...
[MTC 2021] Criando testes automatizados rápidos e robustos com cypress - Walm...[MTC 2021] Criando testes automatizados rápidos e robustos com cypress - Walm...
[MTC 2021] Criando testes automatizados rápidos e robustos com cypress - Walm...
 
O mínimo de Integração Contínua que todo projeto deveria ter
O mínimo de Integração Contínua que todo projeto deveria terO mínimo de Integração Contínua que todo projeto deveria ter
O mínimo de Integração Contínua que todo projeto deveria ter
 
Descomplicando os mocks - pyse
Descomplicando os mocks - pyseDescomplicando os mocks - pyse
Descomplicando os mocks - pyse
 
Como criar testes rápidos e robustos com Cypress
Como criar testes rápidos e robustos com CypressComo criar testes rápidos e robustos com Cypress
Como criar testes rápidos e robustos com Cypress
 
Testes de Unidade - Unidade II
Testes de Unidade - Unidade IITestes de Unidade - Unidade II
Testes de Unidade - Unidade II
 
Java e orientação a objetos
Java e orientação a objetosJava e orientação a objetos
Java e orientação a objetos
 
Django Object factory
Django Object factoryDjango Object factory
Django Object factory
 

Último

Último (9)

ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docxATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 

JUnit Experience