SlideShare une entreprise Scribd logo
1  sur  23
Télécharger pour lire hors ligne
Ruither Borba, o delki8
about.me/delki8
Testes Unitarios
todo código é culpado
até que se prove o contrário
Ruither Borba, o delki8
about.me/delki8
Porque testar?
∆ Porque todo desenvolvedor precisa de uma
forma de garantir a qualidade do que se
escreve. Testes unitários são a forma mais
rápida e prática de testar código.
∆ Porque todo projeto de software precisa
de uma forma repetível de assegurar o
funcionamento de suas funcionalidades,
mesmo depois de muito tempo.
Ruither Borba, o delki8
about.me/delki8
Ferramentas
∆ jUnit: Principal framework para
escrita e execução de testes com
Java.
∆ Mockito: Framework para criar
objetos com comportamento controlado
que substituem as dependências da
classe a ser testada (mocks).
Ruither Borba, o delki8
about.me/delki8
Ferramentas
∆ Eclemma: Plugin para Eclipse que
serve para avaliarmos de forma
visual quais as partes do nosso
código foram chamadas durante a
execução dos testes.
Ruither Borba, o delki8
about.me/delki8
padroes
∆ Nome da classe de testes:
◊
ClasseNegocioBOUT
∆ Onde por a classe de testes:
◊
src/test/java/pacote.classe.negocio
∆ Nome do método de teste:
◊
testMetodoComDescricaoDaChamada()
Ruither Borba, o delki8
about.me/delki8
O que testar?
∆ Controlador: testado pela
automação com Selenium.
∆ Negócio: testado através de testes
unitários com mocks.
∆ Persistência: testado através de
testes unitários sem mocks.
Ruither Borba, o delki8
about.me/delki8
Piramides de testes
Ruither Borba, o delki8
about.me/delki8
mock?
∆ Mocks são objetos de comportamento
altamente controlado com interfaces
idênticas às classes usadas durante
sua instanciação e substituem as
dependências da classe testada
durante a execução dos testes.
Ruither Borba, o delki8
about.me/delki8
Como um mock se
comporta
∆ As chamadas aos métodos de um mock
sempre retornam null a menos que o
retorno do método seja void ou que o
desenvolvedor tenha explicitamente
declarado o retorno do método durante a
fase de configuração do teste.
∆ Nesse caso, para todas as chamadas da
classe testada ao método definido, o mock
sempre vai retornar o retorno declarado.
Ruither Borba, o delki8
about.me/delki8
Como um mock se
comporta
∆ O mock armazena todo o histórico de
quais dos seus métodos foram chamados,
quantas vezes eles foram chamados e com
quais parâmetros esses métodos foram
chamados.
∆ Com esse histórico é possível auditar o
uso do mock durante a fase de avaliação do
teste e aumentar o nível de controle que o
desenvolvedor tem sobre o código testado.
Ruither Borba, o delki8
about.me/delki8
arquitetura
∆ Todos os nossos testes unitários
herdam de AbstractBOUT.
∆ Através de reflexão essa classe já
instancia nossa classe de negócios e
nos força a declarar as
dependências, injetando-as.
Ruither Borba, o delki8
about.me/delki8
arquitetura
∆ Para geração de massa de dados que
não sejam mocks, os padrões Builder e
FakeBuilder foram adotados.
∆ Esses padrões auxiliam a criação de
objetos simples e complexos e serão
muito usados nos nossos testes
unitários para a camada de
persistência.
Ruither Borba, o delki8
about.me/delki8
Teste com codigo legado
int reputacao = 0;
boolean testarComplexo = demonstrarComMetodoComplexo();
if (testarComplexo) {
reputacao -= 1;
} else {
reputacao += 1;
}
Ruither Borba, o delki8
about.me/delki8
tdd?
∆ É uma técnica de desenvolvimento que
se baseia em um ciclo de repetição
curto e simples:
◊
1 - Escreva um teste que falhe.
◊
2 - Escreva o mínimo de código possível
para o teste passar.
◊
3 - Refatore o código e execute novamente o
teste para garantir que ele ainda passa.
◊
4 – Retorne ao passo 1.
Ruither Borba, o delki8
about.me/delki8
Codificando com tdd
int reputacao = 0;
boolean testarComplexo = demonstrarComMetodoComplexo();
if (testarComplexo) {
reputacao -= 1;
} else {
reputacao += 1;
}
Ruither Borba, o delki8
about.me/delki8
Boas praticas
∆ Sempre coloque nomes significativos
nos seus métodos de teste, mesmo que
eles fiquem grandes.
∆ Não altere a visibilidade de um
método para testá-lo. Métodos privados
devem ser testados através dos métodos
públicos que os utilizam.
Ruither Borba, o delki8
about.me/delki8
Boas praticas
∆ Se um bug foi encontrado, antes de
corrigí-lo escreva um teste que vá pegá-
lo, caso contrário ele vai voltar.
∆ Se você quebra um teste, você é
responsável por realizar a correção (no
código ou no teste) que o faça passar.
∆ Termine o dia com um teste falhando.
Ruither Borba, o delki8
about.me/delki8
Boas praticas
∆ Escreva testes para o código
legado.
◊
E o que é código legado?
◊
R: De acordo com Michael Feathers no livro
“Working Effectively with Legacy Code”
(“Trabalhando Eficientemente com Código
Legado”, tradução livre) código legado é
código que não possui testes.
Ruither Borba, o delki8
about.me/delki8
Nem tudo sao flores
∆ Mais código para escrever.
∆ Mais código para manter.
∆ Sair da zona de conforto.
Ruither Borba, o delki8
about.me/delki8
Bala de Prata
∆ Teste unitário não é nem a única e
nem a mais abrangente forma de se
testar uma aplicação. Existem várias
outras formas como testes de
integração, desempenho, aceitação,
etc. Todas as formas são
complementares.
Ruither Borba, o delki8
about.me/delki8
Expectativas
∆ Mas ninguém escreve testes só
porque é bonito. O que esperamos:
◊
Menos defeitos relacionados ao negócio da
aplicação.
◊
Menos tempo do desenvolvedor gasto com
testes na aplicação real.
◊
Menos problemas de impacto em código
existente durante refatorações.
Ruither Borba, o delki8
about.me/delki8
Duvidas?
Ruither Borba, o delki8
about.me/delki8
Recomende
∆ Recomende no Linkedin
∆ Curta no slideshare
∆ Curta no about.me

Contenu connexe

Tendances

TDD: A Essência do Mantra
TDD: A Essência do MantraTDD: A Essência do Mantra
TDD: A Essência do MantraDionatan default
 
Seu app a prova de gambiarras (ou não) - Ferramentas de validaSPção de código
Seu app a prova de gambiarras (ou não) - Ferramentas de validaSPção de códigoSeu app a prova de gambiarras (ou não) - Ferramentas de validaSPção de código
Seu app a prova de gambiarras (ou não) - Ferramentas de validaSPção de códigoChristiane Morais Silva
 
Coding Dojo - Funcionamento
Coding Dojo - FuncionamentoCoding Dojo - Funcionamento
Coding Dojo - Funcionamentothiagodp
 
Apresentacao tdc 2012
Apresentacao tdc 2012Apresentacao tdc 2012
Apresentacao tdc 2012Jorge Oleques
 
TDD para "meros mortais"
TDD para "meros mortais"TDD para "meros mortais"
TDD para "meros mortais"thiagobapt
 
Test driven development teste e design no mundo real by mauricio aniche (z-li...
Test driven development teste e design no mundo real by mauricio aniche (z-li...Test driven development teste e design no mundo real by mauricio aniche (z-li...
Test driven development teste e design no mundo real by mauricio aniche (z-li...GessdaSilvaMachado
 
Dicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDouglas V. Pasqua
 
1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de software1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de softwareHeider Lopes
 
Treinamento TDD - Atech
Treinamento TDD - AtechTreinamento TDD - Atech
Treinamento TDD - Atechcesarcneto
 
Testando Aplicações Django: Quando, Como e Onde?
Testando Aplicações Django: Quando, Como e Onde?Testando Aplicações Django: Quando, Como e Onde?
Testando Aplicações Django: Quando, Como e Onde?Bernardo Fontes
 
TDD: Técnicas, Benefícios e Limitação
TDD: Técnicas, Benefícios e Limitação TDD: Técnicas, Benefícios e Limitação
TDD: Técnicas, Benefícios e Limitação Icaro Camelo
 
TDC 2012 TDD e 20 coisas que você precisa saber
TDC 2012 TDD e 20 coisas que você precisa saberTDC 2012 TDD e 20 coisas que você precisa saber
TDC 2012 TDD e 20 coisas que você precisa saberCamilo Lopes
 
TDD (Test-Driven Development)
TDD (Test-Driven Development)TDD (Test-Driven Development)
TDD (Test-Driven Development)Renato Groff
 

Tendances (20)

TDD na Prática
TDD na PráticaTDD na Prática
TDD na Prática
 
TDD: A Essência do Mantra
TDD: A Essência do MantraTDD: A Essência do Mantra
TDD: A Essência do Mantra
 
Design patterns de uma vez por todas
Design patterns de uma vez por todasDesign patterns de uma vez por todas
Design patterns de uma vez por todas
 
Minicurso de TDD
Minicurso de TDDMinicurso de TDD
Minicurso de TDD
 
Seu app a prova de gambiarras (ou não) - Ferramentas de validaSPção de código
Seu app a prova de gambiarras (ou não) - Ferramentas de validaSPção de códigoSeu app a prova de gambiarras (ou não) - Ferramentas de validaSPção de código
Seu app a prova de gambiarras (ou não) - Ferramentas de validaSPção de código
 
Coding Dojo - Funcionamento
Coding Dojo - FuncionamentoCoding Dojo - Funcionamento
Coding Dojo - Funcionamento
 
Python tdc2019
Python tdc2019 Python tdc2019
Python tdc2019
 
Apresentacao tdc 2012
Apresentacao tdc 2012Apresentacao tdc 2012
Apresentacao tdc 2012
 
TDD para "meros mortais"
TDD para "meros mortais"TDD para "meros mortais"
TDD para "meros mortais"
 
Test driven development teste e design no mundo real by mauricio aniche (z-li...
Test driven development teste e design no mundo real by mauricio aniche (z-li...Test driven development teste e design no mundo real by mauricio aniche (z-li...
Test driven development teste e design no mundo real by mauricio aniche (z-li...
 
Dicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHP
 
1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de software1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de software
 
Treinamento TDD - Atech
Treinamento TDD - AtechTreinamento TDD - Atech
Treinamento TDD - Atech
 
O que é Teste de Software?
O que é Teste de Software?O que é Teste de Software?
O que é Teste de Software?
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven Development
 
Testando Aplicações Django: Quando, Como e Onde?
Testando Aplicações Django: Quando, Como e Onde?Testando Aplicações Django: Quando, Como e Onde?
Testando Aplicações Django: Quando, Como e Onde?
 
TDD: Técnicas, Benefícios e Limitação
TDD: Técnicas, Benefícios e Limitação TDD: Técnicas, Benefícios e Limitação
TDD: Técnicas, Benefícios e Limitação
 
TDD - Test Driven Development com JAVA
TDD - Test Driven Development com JAVATDD - Test Driven Development com JAVA
TDD - Test Driven Development com JAVA
 
TDC 2012 TDD e 20 coisas que você precisa saber
TDC 2012 TDD e 20 coisas que você precisa saberTDC 2012 TDD e 20 coisas que você precisa saber
TDC 2012 TDD e 20 coisas que você precisa saber
 
TDD (Test-Driven Development)
TDD (Test-Driven Development)TDD (Test-Driven Development)
TDD (Test-Driven Development)
 

En vedette

Cambridge Internation Academy Amritsar
Cambridge Internation Academy AmritsarCambridge Internation Academy Amritsar
Cambridge Internation Academy AmritsarManpreet Kaur
 
Your mLearning is Not My mLearning
Your mLearning is Not My mLearningYour mLearning is Not My mLearning
Your mLearning is Not My mLearningSean Bengry
 
Ready Kids: Building a Strong Network for Kentucky's System of #Oral Health Care
Ready Kids: Building a Strong Network for Kentucky's System of #Oral Health CareReady Kids: Building a Strong Network for Kentucky's System of #Oral Health Care
Ready Kids: Building a Strong Network for Kentucky's System of #Oral Health CareKYOralHealthCoalition
 
Presentaciones
PresentacionesPresentaciones
PresentacionesMalizh
 
Presentaciones
PresentacionesPresentaciones
PresentacionesMalizh
 
Presentaciones
PresentacionesPresentaciones
PresentacionesMalizh
 
Classificação prefeitura de cruzeiro técnico
Classificação prefeitura de cruzeiro técnicoClassificação prefeitura de cruzeiro técnico
Classificação prefeitura de cruzeiro técnicoTecnologiaPMC
 
Presentaciones efectivas
Presentaciones efectivasPresentaciones efectivas
Presentaciones efectivasgermanbaez1993
 
Presentación
PresentaciónPresentación
Presentaciónjuanmdu67
 
Como instalar un prosesador de textos br ynnt gonzalez muro
Como instalar un prosesador de textos br ynnt gonzalez muroComo instalar un prosesador de textos br ynnt gonzalez muro
Como instalar un prosesador de textos br ynnt gonzalez muropanaloquera
 
Ipecs sbg-1000 brochure
Ipecs sbg-1000 brochureIpecs sbg-1000 brochure
Ipecs sbg-1000 brochureWill Morey
 
Wireframes del reto revalida
Wireframes del reto revalidaWireframes del reto revalida
Wireframes del reto revalidatanialoaiza9
 
Descoberta de tresors després d’una llevant
Descoberta de tresors  després d’una llevantDescoberta de tresors  després d’una llevant
Descoberta de tresors després d’una llevantdolorscolera
 
งานย่อยที่1
งานย่อยที่1งานย่อยที่1
งานย่อยที่1Tong Tingtong
 

En vedette (20)

Cambridge Internation Academy Amritsar
Cambridge Internation Academy AmritsarCambridge Internation Academy Amritsar
Cambridge Internation Academy Amritsar
 
Your mLearning is Not My mLearning
Your mLearning is Not My mLearningYour mLearning is Not My mLearning
Your mLearning is Not My mLearning
 
De safari por el mundo del vocabulario
De safari por el mundo del  vocabularioDe safari por el mundo del  vocabulario
De safari por el mundo del vocabulario
 
Ready Kids: Building a Strong Network for Kentucky's System of #Oral Health Care
Ready Kids: Building a Strong Network for Kentucky's System of #Oral Health CareReady Kids: Building a Strong Network for Kentucky's System of #Oral Health Care
Ready Kids: Building a Strong Network for Kentucky's System of #Oral Health Care
 
Rphpp2203
Rphpp2203Rphpp2203
Rphpp2203
 
Presentaciones
PresentacionesPresentaciones
Presentaciones
 
Presentaciones
PresentacionesPresentaciones
Presentaciones
 
Presentaciones
PresentacionesPresentaciones
Presentaciones
 
Classificação prefeitura de cruzeiro técnico
Classificação prefeitura de cruzeiro técnicoClassificação prefeitura de cruzeiro técnico
Classificação prefeitura de cruzeiro técnico
 
Presentaciones efectivas
Presentaciones efectivasPresentaciones efectivas
Presentaciones efectivas
 
Presentación
PresentaciónPresentación
Presentación
 
03 il chicco
03 il chicco03 il chicco
03 il chicco
 
Como instalar un prosesador de textos br ynnt gonzalez muro
Como instalar un prosesador de textos br ynnt gonzalez muroComo instalar un prosesador de textos br ynnt gonzalez muro
Como instalar un prosesador de textos br ynnt gonzalez muro
 
Ipecs sbg-1000 brochure
Ipecs sbg-1000 brochureIpecs sbg-1000 brochure
Ipecs sbg-1000 brochure
 
La música
La músicaLa música
La música
 
Wireframes del reto revalida
Wireframes del reto revalidaWireframes del reto revalida
Wireframes del reto revalida
 
270
270270
270
 
Descoberta de tresors després d’una llevant
Descoberta de tresors  després d’una llevantDescoberta de tresors  després d’una llevant
Descoberta de tresors després d’una llevant
 
งานย่อยที่1
งานย่อยที่1งานย่อยที่1
งานย่อยที่1
 
A Wedding In Ludlow
A Wedding In LudlowA Wedding In Ludlow
A Wedding In Ludlow
 

Similaire à Testes Unitários: Ferramentas e Padrões

Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1Diego Pacheco
 
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...Developer Academy
 
Desenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesDesenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesCamilo Ribeiro
 
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 PHPUnitDomingos Teruel
 
Desenvolvimento Dirigido por Testes com Junit
Desenvolvimento Dirigido por Testes com JunitDesenvolvimento Dirigido por Testes com Junit
Desenvolvimento Dirigido por Testes com JunitAdolfo Neto
 
TDD com Código Legado
TDD com Código LegadoTDD com Código Legado
TDD com Código LegadoCesar Romero
 
Testes de Unidade com Junit
Testes de Unidade com JunitTestes de Unidade com Junit
Testes de Unidade com Junitcejug
 
Programe a eficácia do seu código
Programe a eficácia do seu códigoPrograme a eficácia do seu código
Programe a eficácia do seu códigoAna Claudia Nogueira
 
Clean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisClean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisRogerio Fontes
 
Programação Pragmática
Programação PragmáticaProgramação Pragmática
Programação Pragmáticaelliando dias
 
TDC Florianópolis 2019. Trilha Java - Arquitetura de Testes
TDC Florianópolis 2019. Trilha Java - Arquitetura de TestesTDC Florianópolis 2019. Trilha Java - Arquitetura de Testes
TDC Florianópolis 2019. Trilha Java - Arquitetura de TestesSandro Giacomozzi
 
Automação de testes em projetos ágeis
Automação de testes em projetos ágeisAutomação de testes em projetos ágeis
Automação de testes em projetos ágeisCristiano Caetano
 
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 ...Isaac de Souza
 
Apresentação jasmine
Apresentação jasmineApresentação jasmine
Apresentação jasmineRangel Javier
 
Testes automatizados.pptx
Testes automatizados.pptxTestes automatizados.pptx
Testes automatizados.pptxCarlos Gonzaga
 

Similaire à Testes Unitários: Ferramentas e Padrões (20)

Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1
 
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
 
TDD (Resumo)
TDD (Resumo)TDD (Resumo)
TDD (Resumo)
 
Desenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesDesenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por Testes
 
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
 
Desenvolvimento Dirigido por Testes com Junit
Desenvolvimento Dirigido por Testes com JunitDesenvolvimento Dirigido por Testes com Junit
Desenvolvimento Dirigido por Testes com Junit
 
TDD com Código Legado
TDD com Código LegadoTDD com Código Legado
TDD com Código Legado
 
Testes de Unidade com Junit
Testes de Unidade com JunitTestes de Unidade com Junit
Testes de Unidade com Junit
 
Apresentação testes white box
Apresentação testes white boxApresentação testes white box
Apresentação testes white box
 
Programe a eficácia do seu código
Programe a eficácia do seu códigoPrograme a eficácia do seu código
Programe a eficácia do seu código
 
Clean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisClean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everis
 
Programação Pragmática
Programação PragmáticaProgramação Pragmática
Programação Pragmática
 
Codigo limpo
Codigo limpoCodigo limpo
Codigo limpo
 
Refatoração de Código Legado
Refatoração de Código LegadoRefatoração de Código Legado
Refatoração de Código Legado
 
TDC Florianópolis 2019. Trilha Java - Arquitetura de Testes
TDC Florianópolis 2019. Trilha Java - Arquitetura de TestesTDC Florianópolis 2019. Trilha Java - Arquitetura de Testes
TDC Florianópolis 2019. Trilha Java - Arquitetura de Testes
 
Automação de testes em projetos ágeis
Automação de testes em projetos ágeisAutomação de testes em projetos ágeis
Automação de testes em projetos ágeis
 
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 ...
 
Apresentação jasmine
Apresentação jasmineApresentação jasmine
Apresentação jasmine
 
Test driven development
Test driven developmentTest driven development
Test driven development
 
Testes automatizados.pptx
Testes automatizados.pptxTestes automatizados.pptx
Testes automatizados.pptx
 

Testes Unitários: Ferramentas e Padrões

  • 1. Ruither Borba, o delki8 about.me/delki8 Testes Unitarios todo código é culpado até que se prove o contrário
  • 2. Ruither Borba, o delki8 about.me/delki8 Porque testar? ∆ Porque todo desenvolvedor precisa de uma forma de garantir a qualidade do que se escreve. Testes unitários são a forma mais rápida e prática de testar código. ∆ Porque todo projeto de software precisa de uma forma repetível de assegurar o funcionamento de suas funcionalidades, mesmo depois de muito tempo.
  • 3. Ruither Borba, o delki8 about.me/delki8 Ferramentas ∆ jUnit: Principal framework para escrita e execução de testes com Java. ∆ Mockito: Framework para criar objetos com comportamento controlado que substituem as dependências da classe a ser testada (mocks).
  • 4. Ruither Borba, o delki8 about.me/delki8 Ferramentas ∆ Eclemma: Plugin para Eclipse que serve para avaliarmos de forma visual quais as partes do nosso código foram chamadas durante a execução dos testes.
  • 5. Ruither Borba, o delki8 about.me/delki8 padroes ∆ Nome da classe de testes: ◊ ClasseNegocioBOUT ∆ Onde por a classe de testes: ◊ src/test/java/pacote.classe.negocio ∆ Nome do método de teste: ◊ testMetodoComDescricaoDaChamada()
  • 6. Ruither Borba, o delki8 about.me/delki8 O que testar? ∆ Controlador: testado pela automação com Selenium. ∆ Negócio: testado através de testes unitários com mocks. ∆ Persistência: testado através de testes unitários sem mocks.
  • 7. Ruither Borba, o delki8 about.me/delki8 Piramides de testes
  • 8. Ruither Borba, o delki8 about.me/delki8 mock? ∆ Mocks são objetos de comportamento altamente controlado com interfaces idênticas às classes usadas durante sua instanciação e substituem as dependências da classe testada durante a execução dos testes.
  • 9. Ruither Borba, o delki8 about.me/delki8 Como um mock se comporta ∆ As chamadas aos métodos de um mock sempre retornam null a menos que o retorno do método seja void ou que o desenvolvedor tenha explicitamente declarado o retorno do método durante a fase de configuração do teste. ∆ Nesse caso, para todas as chamadas da classe testada ao método definido, o mock sempre vai retornar o retorno declarado.
  • 10. Ruither Borba, o delki8 about.me/delki8 Como um mock se comporta ∆ O mock armazena todo o histórico de quais dos seus métodos foram chamados, quantas vezes eles foram chamados e com quais parâmetros esses métodos foram chamados. ∆ Com esse histórico é possível auditar o uso do mock durante a fase de avaliação do teste e aumentar o nível de controle que o desenvolvedor tem sobre o código testado.
  • 11. Ruither Borba, o delki8 about.me/delki8 arquitetura ∆ Todos os nossos testes unitários herdam de AbstractBOUT. ∆ Através de reflexão essa classe já instancia nossa classe de negócios e nos força a declarar as dependências, injetando-as.
  • 12. Ruither Borba, o delki8 about.me/delki8 arquitetura ∆ Para geração de massa de dados que não sejam mocks, os padrões Builder e FakeBuilder foram adotados. ∆ Esses padrões auxiliam a criação de objetos simples e complexos e serão muito usados nos nossos testes unitários para a camada de persistência.
  • 13. Ruither Borba, o delki8 about.me/delki8 Teste com codigo legado int reputacao = 0; boolean testarComplexo = demonstrarComMetodoComplexo(); if (testarComplexo) { reputacao -= 1; } else { reputacao += 1; }
  • 14. Ruither Borba, o delki8 about.me/delki8 tdd? ∆ É uma técnica de desenvolvimento que se baseia em um ciclo de repetição curto e simples: ◊ 1 - Escreva um teste que falhe. ◊ 2 - Escreva o mínimo de código possível para o teste passar. ◊ 3 - Refatore o código e execute novamente o teste para garantir que ele ainda passa. ◊ 4 – Retorne ao passo 1.
  • 15. Ruither Borba, o delki8 about.me/delki8 Codificando com tdd int reputacao = 0; boolean testarComplexo = demonstrarComMetodoComplexo(); if (testarComplexo) { reputacao -= 1; } else { reputacao += 1; }
  • 16. Ruither Borba, o delki8 about.me/delki8 Boas praticas ∆ Sempre coloque nomes significativos nos seus métodos de teste, mesmo que eles fiquem grandes. ∆ Não altere a visibilidade de um método para testá-lo. Métodos privados devem ser testados através dos métodos públicos que os utilizam.
  • 17. Ruither Borba, o delki8 about.me/delki8 Boas praticas ∆ Se um bug foi encontrado, antes de corrigí-lo escreva um teste que vá pegá- lo, caso contrário ele vai voltar. ∆ Se você quebra um teste, você é responsável por realizar a correção (no código ou no teste) que o faça passar. ∆ Termine o dia com um teste falhando.
  • 18. Ruither Borba, o delki8 about.me/delki8 Boas praticas ∆ Escreva testes para o código legado. ◊ E o que é código legado? ◊ R: De acordo com Michael Feathers no livro “Working Effectively with Legacy Code” (“Trabalhando Eficientemente com Código Legado”, tradução livre) código legado é código que não possui testes.
  • 19. Ruither Borba, o delki8 about.me/delki8 Nem tudo sao flores ∆ Mais código para escrever. ∆ Mais código para manter. ∆ Sair da zona de conforto.
  • 20. Ruither Borba, o delki8 about.me/delki8 Bala de Prata ∆ Teste unitário não é nem a única e nem a mais abrangente forma de se testar uma aplicação. Existem várias outras formas como testes de integração, desempenho, aceitação, etc. Todas as formas são complementares.
  • 21. Ruither Borba, o delki8 about.me/delki8 Expectativas ∆ Mas ninguém escreve testes só porque é bonito. O que esperamos: ◊ Menos defeitos relacionados ao negócio da aplicação. ◊ Menos tempo do desenvolvedor gasto com testes na aplicação real. ◊ Menos problemas de impacto em código existente durante refatorações.
  • 22. Ruither Borba, o delki8 about.me/delki8 Duvidas?
  • 23. Ruither Borba, o delki8 about.me/delki8 Recomende ∆ Recomende no Linkedin ∆ Curta no slideshare ∆ Curta no about.me