Test Driven Development 
Conceitos básicos 
Mateus Parente
O QUE É TDD ?
Por que testar 
um sistema?
Test Driven Development 
Conceito de testes automatizados 
Produtividade?! 
Quantidade x Qualidade
Testes de unidade 
Exemplo
Test Driven Development 
Teste de unidade para nova 
funcionalidade 
Teste 
Falhou 
Código mais simples que 
resolva o problema 
Melhoramos o 
código 
(se necessário)
Vantagens 
● Melhora na estrutura e design da Classe 
● Simplificação 
● O Código já nasce testado 
● Feedback constante
Baby Steps 
Qual a idéia 
Exemplificando
Cenário: Salários menores que 3000, têm 10% de desconto
Fazendo o teste passar 
da maneira mais simples 
Melhorando
Cenário: Salários maiores que 3000, têm 20% de desconto
Fazendo o teste passar 
da maneira mais simples 
Melhorando
Qualidade do código de teste 
Carrinho de compras: 
Uma funcionalidade que devolva o valor do item de maior valor 
dentro desse carrinho de compras. Pensando já nos testes, 
temos os seguintes cenários: 
• Se o carrinho só tiver um item 
• Se o carrinho tiver muitos itens 
• Um carrinho sem nenhum item
Exemplificando
Diminuir repetição de código 
@Before
Nomenclatura dos testes 
O que é mais legível ao desenvolvedor? 
ou
Mock Objects 
Conceito de objetos “dublês” 
Testa FuncionarioDAO
Mock Objects 
Usar ou não usar? 
Faz exatamente o que você definir 
Simular todas as dependências 
Difícil manutenção se usado em excesso 
Podem ocultar problemas em dependências que só apareceriam em testes de integração 
Infraestrutura e testes complicados 
Intimidade inapropriada 
TDD ao estilo londrino
Semelhança com o mundo real 
Testes unitários TeTsetesste dse u inntietágrriaoçsão Testes de sistema 
Mais caro e mais difícil de ser escrito
Test Driven Development 
E quando não usar TDD? 
Usar TDD em testes de integração? 
Aplicações WEB ? 
Quando não praticar? 
Sua classe necessita de um feedback constante?
Princípios SOLID 
● Rigidez 
● Fragilidade 
● Imobilidade 
● Viscosidade 
● Repetição desnecessária 
● Opacidade
Apresentação baseada no Livro 
Test Driven Development 
Teste e Design no Mundo Real - Mauricio Aniche 
Outra referências: 
http://blog.caelum.com.br/facilitando-seus-testes-de-unidade- 
no-java-um-pouco-de-mockito/ 
http://gc.blog.br/2007/08/28/mock-objects-em-excesso-podem- 
atrapalhar/

Test Driven Development - Conceitos básicos

  • 1.
    Test Driven Development Conceitos básicos Mateus Parente
  • 2.
    O QUE ÉTDD ?
  • 3.
    Por que testar um sistema?
  • 4.
    Test Driven Development Conceito de testes automatizados Produtividade?! Quantidade x Qualidade
  • 5.
  • 6.
    Test Driven Development Teste de unidade para nova funcionalidade Teste Falhou Código mais simples que resolva o problema Melhoramos o código (se necessário)
  • 7.
    Vantagens ● Melhorana estrutura e design da Classe ● Simplificação ● O Código já nasce testado ● Feedback constante
  • 8.
    Baby Steps Quala idéia Exemplificando
  • 9.
    Cenário: Salários menoresque 3000, têm 10% de desconto
  • 10.
    Fazendo o testepassar da maneira mais simples Melhorando
  • 11.
    Cenário: Salários maioresque 3000, têm 20% de desconto
  • 12.
    Fazendo o testepassar da maneira mais simples Melhorando
  • 13.
    Qualidade do códigode teste Carrinho de compras: Uma funcionalidade que devolva o valor do item de maior valor dentro desse carrinho de compras. Pensando já nos testes, temos os seguintes cenários: • Se o carrinho só tiver um item • Se o carrinho tiver muitos itens • Um carrinho sem nenhum item
  • 14.
  • 15.
    Diminuir repetição decódigo @Before
  • 16.
    Nomenclatura dos testes O que é mais legível ao desenvolvedor? ou
  • 17.
    Mock Objects Conceitode objetos “dublês” Testa FuncionarioDAO
  • 18.
    Mock Objects Usarou não usar? Faz exatamente o que você definir Simular todas as dependências Difícil manutenção se usado em excesso Podem ocultar problemas em dependências que só apareceriam em testes de integração Infraestrutura e testes complicados Intimidade inapropriada TDD ao estilo londrino
  • 19.
    Semelhança com omundo real Testes unitários TeTsetesste dse u inntietágrriaoçsão Testes de sistema Mais caro e mais difícil de ser escrito
  • 20.
    Test Driven Development E quando não usar TDD? Usar TDD em testes de integração? Aplicações WEB ? Quando não praticar? Sua classe necessita de um feedback constante?
  • 21.
    Princípios SOLID ●Rigidez ● Fragilidade ● Imobilidade ● Viscosidade ● Repetição desnecessária ● Opacidade
  • 22.
    Apresentação baseada noLivro Test Driven Development Teste e Design no Mundo Real - Mauricio Aniche Outra referências: http://blog.caelum.com.br/facilitando-seus-testes-de-unidade- no-java-um-pouco-de-mockito/ http://gc.blog.br/2007/08/28/mock-objects-em-excesso-podem- atrapalhar/