SlideShare una empresa de Scribd logo
1 de 23
Descargar para leer sin conexión
AEXO TI
Boas práticas de desenvolvimento Orientado
a Testes (TDD)
Separação de Conceitos
Testes manuais
Testes de Unidade
Testes de Integração
Testes de Aceitação
Testes de Carga
Testes de Stress
Anatomia de Teste (jUnit)
Um teste deve testar apenas uma pequena
funcionalidade
Deve ser claro o que o teste deve fazer
Exemplo:
Teste conciso?
Diz claramente o que
está sendo testado?
public class RotinaBackupTest {
public void setup() {....
}
public void tearDown() {.....
}
@Test
public void testBackup() {
...
}
}
Exemplo:
Diz
claramente
o que está
sendo
testado
AGORA?
public class RotinaBackupTest {
@Test
public void deveriaCriarArquivoTemporarioAoRealizarBackup() {
...
}
@Test
public void deveriaCompactarArquivoAoFinalizarBackup() {
...
}
}
Nomes são importantes
Lembre-se quando você bater o olho no
método do teste, você deve saber exatamente
o que está sendo testado.
Testes de integração
Testam a interação entre componentes do
sistema
Usado geralmente nas fronteiras do sistema:
Banco de dados
Acesso a Ldap
Leitura de arquivos
etc...
Testes de integração
Devem ser isolados também, pois o
comportamento deve ser repetitível.
São mais difíceis de ser escritos.
bibliotecas que ajudam:
DBUnit - permite mockar banco de dados
Unboundid - instancia um servidor de ldap
Jetty - pemite subir um container de servlet
Etc...
Outros tipos de testes
Testes de aceitação - testes desenvolvidos
para que o usuário final possa averiguar se o
sistema está tendo o comportamento
esperado, devido a fragilidade destes testes,
são raramente implementados.
Ferramentas:
Selenium, Phantomjs, Capybara, etc...
Outros tipos de testes
Testes de carga: testes que tem como
premissa gerar um carga no sistema simulando
o seu comportamento quando diversos
usuários estão usando o programa.
Ferramentas:
JMetter, apache AB, Selenium Grid, etc...
Outros tipos de testes
Testes de Stress: testes que tem como
premissa gerar um stresse no sistema para ver
como ele se comporta. Será que vai perder
dados? Será que o número do pool está bem
escalonado?
Ferramentas:
JMetter, apache AB, etc...
Piramide de testes
99% do código deve ser testado
60% deve ser testado
10% deve ser testado
Cobertura do teste
Problemas comuns nos testes
Os testes de unidade devem ser isolados:
● somente uma classe deve ser testada
● Dependências devem ser mockadas
Mockito
Biblioteca usada para fazer mocks de classes
Permite definir o comportamento das
dependencias
Simples de usar
Exemplo:
public class CadastroDeUsuarioActionTest {
@Mock
private GerenciadorUsuarios gerenciadorUsuarios;
@Mock
private MensagensTela mensagensTela;
private CadastroUsuarioAction cadastroUsuario;
@Before
public void setup(){
// use static imports para classes mockito
initMocks(this);
cadastroUsuario = new CadastroUsuarioAction();
cadastroUsuario.gerenciadorUsuarios = gerenciadorUsuarios;
cadastroUsuario.mensagensTela = mensagensTela;
}
Exemplo: Continuação
@Test
public void deveriaEmitirAlertaParaUsuarioParaErrosDeCadastramentoNoGerenciadorUsuarios(){
Usuario usuario = new Usuario();
doThrow(new CadastroInconsistenteException()).when(gerenciadorUsuarios).salvar(usuario);
cadastroUsuario.salvar(usuario);
verify(mensagensTela).adicionarMensagemErro("Cadastro inconsistente");
}
}
DSL para gravação comportamento
doReturn(usuario).when(cadastroUsuario).salvar(usuario);
doCallRealMethod().when(cadastroUsuario).salvar(usuario);
doAnswer(answer).when(cadastroUsuario).salvar(usuario);
doThrow(toBeThrown).when(cadastroUsuario).salvar(usuario);
reset(cadastroUsuario);
Lembrete:
Use static imports:
HamCrest
Biblioteca para gerar asserções
Melhor que asserts do junit
possui dsl para tratamento de asserções
Exemplo: Hamcrest
assertThat(usuario, is(notNullValue()));
// coleções
assertThat(usuario, isIn(usuarios));
assertThat(usuarios, hasItems(helena,joana));
// reflections
assertThat(usuario, hasProperty("nome"));
assertThat(usuario, hasProperty("nome",is("carlos")));
assertThat(nomeUsuario, not(is("carlos")));
assertThat(saldoConta, is(positivo)); // milagre
Lembrete:
static imports amém!
Finalmente:
Dicas finais:
Jcobertura - dedo duro do codigo não testado
SonarQube já tem jcobertura por padrão para
os projetos analisados.
Use TDD (tente pelo menos), o efeito colateral
é que já terá um teste implementado para cada
implementação de código que fizer.
Fim

Más contenido relacionado

La actualidad más candente

Apresentacao Testes de Unidade
Apresentacao Testes de UnidadeApresentacao Testes de Unidade
Apresentacao Testes de UnidadeAline Ferreira
 
Desenvolvimento Dirigido por Testes com Junit
Desenvolvimento Dirigido por Testes com JunitDesenvolvimento Dirigido por Testes com Junit
Desenvolvimento Dirigido por Testes com JunitAdolfo Neto
 
Padrões para Desenvolvimento de Software Guiado por Testes
Padrões para Desenvolvimento de Software Guiado por TestesPadrões para Desenvolvimento de Software Guiado por Testes
Padrões para Desenvolvimento de Software Guiado por TestesEverton Rodrigues
 
Introdução a testes automatizados
Introdução a testes automatizadosIntrodução a testes automatizados
Introdução a testes automatizadosThiago Ghisi
 
Testes Automatizados de Software
Testes Automatizados de SoftwareTestes Automatizados de Software
Testes Automatizados de SoftwareMaurício Aniche
 
Implementando Testes Unitários em Java - Manoel Pimentel
Implementando Testes Unitários em Java - Manoel PimentelImplementando Testes Unitários em Java - Manoel Pimentel
Implementando Testes Unitários em Java - Manoel PimentelManoel Pimentel Medeiros
 
Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1Diego Pacheco
 
Testes Unitários/Integrados
Testes Unitários/IntegradosTestes Unitários/Integrados
Testes Unitários/IntegradosGiovanni Bassi
 
Introdução a testes unitários automatizados com JUnit e NUnit
Introdução a testes unitários automatizados com JUnit e NUnitIntrodução a testes unitários automatizados com JUnit e NUnit
Introdução a testes unitários automatizados com JUnit e NUnitelliando dias
 
JUnit - Selenium
JUnit - SeleniumJUnit - Selenium
JUnit - SeleniumCaue Guerra
 
Testes de Unidade com Junit
Testes de Unidade com JunitTestes de Unidade com Junit
Testes de Unidade com Junitcejug
 
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...Rodrigo Oliveira, Msc, PMP
 
Testes de unidade alem do basico
Testes de unidade alem do basicoTestes de unidade alem do basico
Testes de unidade alem do basicoIsmael
 

La actualidad más candente (20)

Testes de Sistema
Testes de SistemaTestes de Sistema
Testes de Sistema
 
Apresentacao Testes de Unidade
Apresentacao Testes de UnidadeApresentacao Testes de Unidade
Apresentacao Testes de Unidade
 
Desenvolvimento Dirigido por Testes com Junit
Desenvolvimento Dirigido por Testes com JunitDesenvolvimento Dirigido por Testes com Junit
Desenvolvimento Dirigido por Testes com Junit
 
Padrões para Desenvolvimento de Software Guiado por Testes
Padrões para Desenvolvimento de Software Guiado por TestesPadrões para Desenvolvimento de Software Guiado por Testes
Padrões para Desenvolvimento de Software Guiado por Testes
 
Introdução a testes automatizados
Introdução a testes automatizadosIntrodução a testes automatizados
Introdução a testes automatizados
 
Testes Automatizados de Software
Testes Automatizados de SoftwareTestes Automatizados de Software
Testes Automatizados de Software
 
Implementando Testes Unitários em Java - Manoel Pimentel
Implementando Testes Unitários em Java - Manoel PimentelImplementando Testes Unitários em Java - Manoel Pimentel
Implementando Testes Unitários em Java - Manoel Pimentel
 
Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1
 
Testes Unitários/Integrados
Testes Unitários/IntegradosTestes Unitários/Integrados
Testes Unitários/Integrados
 
Testes Unitários usando TestNG
Testes Unitários usando TestNGTestes Unitários usando TestNG
Testes Unitários usando TestNG
 
Qualidade
QualidadeQualidade
Qualidade
 
Introdução a testes unitários automatizados com JUnit e NUnit
Introdução a testes unitários automatizados com JUnit e NUnitIntrodução a testes unitários automatizados com JUnit e NUnit
Introdução a testes unitários automatizados com JUnit e NUnit
 
Palestra Testes De Unidade Com JUnit
Palestra Testes De Unidade Com JUnitPalestra Testes De Unidade Com JUnit
Palestra Testes De Unidade Com JUnit
 
JUnit - Selenium
JUnit - SeleniumJUnit - Selenium
JUnit - Selenium
 
TDD (Resumo)
TDD (Resumo)TDD (Resumo)
TDD (Resumo)
 
Testes de Unidade com Junit
Testes de Unidade com JunitTestes de Unidade com Junit
Testes de Unidade com Junit
 
Testes de Sofware
Testes de SofwareTestes de Sofware
Testes de Sofware
 
J unit xp
J unit xpJ unit xp
J unit xp
 
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...
 
Testes de unidade alem do basico
Testes de unidade alem do basicoTestes de unidade alem do basico
Testes de unidade alem do basico
 

Similar a Aexo TI - Boas práticas de testes tdd

Teste de Integração - Unidade III
Teste de Integração - Unidade IIITeste de Integração - Unidade III
Teste de Integração - Unidade IIIJoão Lourenço
 
Android: testes automatizados e TDD
Android: testes automatizados e TDDAndroid: testes automatizados e TDD
Android: testes automatizados e TDDDextra
 
Mock it with mockito
Mock it with mockitoMock it with mockito
Mock it with mockitoRenan Uchôa
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Androidtdc-globalcode
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Androidtdc-globalcode
 
ABAP Code Retreat Brasil - Apagando tudo e começando novamente: Conhecendo o TDD
ABAP Code Retreat Brasil - Apagando tudo e começando novamente: Conhecendo o TDDABAP Code Retreat Brasil - Apagando tudo e começando novamente: Conhecendo o TDD
ABAP Code Retreat Brasil - Apagando tudo e começando novamente: Conhecendo o TDDRaphael Pacheco
 
Paletra sobre TDD, ocorrida no #DevDojo
Paletra sobre TDD, ocorrida no #DevDojoPaletra sobre TDD, ocorrida no #DevDojo
Paletra sobre TDD, ocorrida no #DevDojoflavio1110
 
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...Claudinei Brito Junior
 
Android testing PT-BR
Android testing PT-BRAndroid testing PT-BR
Android testing PT-BRrafaeladson
 
Android DevConference - Indo além com automação de testes de apps Android
Android DevConference - Indo além com automação de testes de apps AndroidAndroid DevConference - Indo além com automação de testes de apps Android
Android DevConference - Indo além com automação de testes de apps AndroidiMasters
 
Indo além com Automação de Testes de Apps Android
Indo além com Automação de Testes de Apps AndroidIndo além com Automação de Testes de Apps Android
Indo além com Automação de Testes de Apps AndroidEduardo Carrara de Araujo
 

Similar a Aexo TI - Boas práticas de testes tdd (20)

Testes de Unidade com JUnit
Testes de Unidade com JUnitTestes de Unidade com JUnit
Testes de Unidade com JUnit
 
Teste de Integração - Unidade III
Teste de Integração - Unidade IIITeste de Integração - Unidade III
Teste de Integração - Unidade III
 
Testes com JUnit
Testes com JUnitTestes com JUnit
Testes com JUnit
 
Android: testes automatizados e TDD
Android: testes automatizados e TDDAndroid: testes automatizados e TDD
Android: testes automatizados e TDD
 
Testes Unitários
Testes UnitáriosTestes Unitários
Testes Unitários
 
Programação Defensiva
Programação DefensivaProgramação Defensiva
Programação Defensiva
 
Mock it with mockito
Mock it with mockitoMock it with mockito
Mock it with mockito
 
Introdução a tdd
Introdução a tddIntrodução a tdd
Introdução a tdd
 
JUnit Sample
JUnit SampleJUnit Sample
JUnit Sample
 
Aula JPA
Aula JPAAula JPA
Aula JPA
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Android
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Android
 
ABAP Code Retreat Brasil - Apagando tudo e começando novamente: Conhecendo o TDD
ABAP Code Retreat Brasil - Apagando tudo e começando novamente: Conhecendo o TDDABAP Code Retreat Brasil - Apagando tudo e começando novamente: Conhecendo o TDD
ABAP Code Retreat Brasil - Apagando tudo e começando novamente: Conhecendo o TDD
 
Aula5
Aula5Aula5
Aula5
 
Paletra sobre TDD, ocorrida no #DevDojo
Paletra sobre TDD, ocorrida no #DevDojoPaletra sobre TDD, ocorrida no #DevDojo
Paletra sobre TDD, ocorrida no #DevDojo
 
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
 
Android testing PT-BR
Android testing PT-BRAndroid testing PT-BR
Android testing PT-BR
 
TDD com Python (Completo)
TDD com Python (Completo)TDD com Python (Completo)
TDD com Python (Completo)
 
Android DevConference - Indo além com automação de testes de apps Android
Android DevConference - Indo além com automação de testes de apps AndroidAndroid DevConference - Indo além com automação de testes de apps Android
Android DevConference - Indo além com automação de testes de apps Android
 
Indo além com Automação de Testes de Apps Android
Indo além com Automação de Testes de Apps AndroidIndo além com Automação de Testes de Apps Android
Indo além com Automação de Testes de Apps Android
 

Aexo TI - Boas práticas de testes tdd

  • 1. AEXO TI Boas práticas de desenvolvimento Orientado a Testes (TDD)
  • 2. Separação de Conceitos Testes manuais Testes de Unidade Testes de Integração Testes de Aceitação Testes de Carga Testes de Stress
  • 3. Anatomia de Teste (jUnit) Um teste deve testar apenas uma pequena funcionalidade Deve ser claro o que o teste deve fazer
  • 4. Exemplo: Teste conciso? Diz claramente o que está sendo testado? public class RotinaBackupTest { public void setup() {.... } public void tearDown() {..... } @Test public void testBackup() { ... } }
  • 5. Exemplo: Diz claramente o que está sendo testado AGORA? public class RotinaBackupTest { @Test public void deveriaCriarArquivoTemporarioAoRealizarBackup() { ... } @Test public void deveriaCompactarArquivoAoFinalizarBackup() { ... } }
  • 6. Nomes são importantes Lembre-se quando você bater o olho no método do teste, você deve saber exatamente o que está sendo testado.
  • 7. Testes de integração Testam a interação entre componentes do sistema Usado geralmente nas fronteiras do sistema: Banco de dados Acesso a Ldap Leitura de arquivos etc...
  • 8. Testes de integração Devem ser isolados também, pois o comportamento deve ser repetitível. São mais difíceis de ser escritos. bibliotecas que ajudam: DBUnit - permite mockar banco de dados Unboundid - instancia um servidor de ldap Jetty - pemite subir um container de servlet Etc...
  • 9. Outros tipos de testes Testes de aceitação - testes desenvolvidos para que o usuário final possa averiguar se o sistema está tendo o comportamento esperado, devido a fragilidade destes testes, são raramente implementados. Ferramentas: Selenium, Phantomjs, Capybara, etc...
  • 10. Outros tipos de testes Testes de carga: testes que tem como premissa gerar um carga no sistema simulando o seu comportamento quando diversos usuários estão usando o programa. Ferramentas: JMetter, apache AB, Selenium Grid, etc...
  • 11. Outros tipos de testes Testes de Stress: testes que tem como premissa gerar um stresse no sistema para ver como ele se comporta. Será que vai perder dados? Será que o número do pool está bem escalonado? Ferramentas: JMetter, apache AB, etc...
  • 12. Piramide de testes 99% do código deve ser testado 60% deve ser testado 10% deve ser testado Cobertura do teste
  • 13. Problemas comuns nos testes Os testes de unidade devem ser isolados: ● somente uma classe deve ser testada ● Dependências devem ser mockadas
  • 14. Mockito Biblioteca usada para fazer mocks de classes Permite definir o comportamento das dependencias Simples de usar
  • 15. Exemplo: public class CadastroDeUsuarioActionTest { @Mock private GerenciadorUsuarios gerenciadorUsuarios; @Mock private MensagensTela mensagensTela; private CadastroUsuarioAction cadastroUsuario; @Before public void setup(){ // use static imports para classes mockito initMocks(this); cadastroUsuario = new CadastroUsuarioAction(); cadastroUsuario.gerenciadorUsuarios = gerenciadorUsuarios; cadastroUsuario.mensagensTela = mensagensTela; }
  • 16. Exemplo: Continuação @Test public void deveriaEmitirAlertaParaUsuarioParaErrosDeCadastramentoNoGerenciadorUsuarios(){ Usuario usuario = new Usuario(); doThrow(new CadastroInconsistenteException()).when(gerenciadorUsuarios).salvar(usuario); cadastroUsuario.salvar(usuario); verify(mensagensTela).adicionarMensagemErro("Cadastro inconsistente"); } }
  • 17. DSL para gravação comportamento doReturn(usuario).when(cadastroUsuario).salvar(usuario); doCallRealMethod().when(cadastroUsuario).salvar(usuario); doAnswer(answer).when(cadastroUsuario).salvar(usuario); doThrow(toBeThrown).when(cadastroUsuario).salvar(usuario); reset(cadastroUsuario);
  • 19. HamCrest Biblioteca para gerar asserções Melhor que asserts do junit possui dsl para tratamento de asserções
  • 20. Exemplo: Hamcrest assertThat(usuario, is(notNullValue())); // coleções assertThat(usuario, isIn(usuarios)); assertThat(usuarios, hasItems(helena,joana)); // reflections assertThat(usuario, hasProperty("nome")); assertThat(usuario, hasProperty("nome",is("carlos"))); assertThat(nomeUsuario, not(is("carlos"))); assertThat(saldoConta, is(positivo)); // milagre
  • 22. Finalmente: Dicas finais: Jcobertura - dedo duro do codigo não testado SonarQube já tem jcobertura por padrão para os projetos analisados. Use TDD (tente pelo menos), o efeito colateral é que já terá um teste implementado para cada implementação de código que fizer.
  • 23. Fim