SlideShare uma empresa Scribd logo
1 de 34
Por que você não escreve
Testes Unitários?
Alex Tercete
alex.tercete@vtex.com.br
Eu sei porque!
As quatro “desculpas”
Não sei do
que se trata
Não sei
como
Não tenho
tempo
Eu já
escrevo
Você provavelmente já faz testes
Clique, clique,
clique
Debug
Console
Application
Testes
automatizados
Escrever código
Como desenvolvemos atualmente
Camada de
apresentação
(UI)
Camada de
Serviço
Camada de
Lógica
Camada de
Acesso a Dados
“Clicar no botão”
Funcionou? DEBUG
Não
Comemorar!
Sim
Debug-Driven
Development
(DDD)
Uma nova forma de pensar
Camada X
Escrever teste
Implementar
funcionalidade
Terminou?
Não
Fim
Sim
Camada Y
Escrever teste
Implementar
funcionalidade
Terminou?
Não
Fim
Sim
Camada Z
Escrever teste
Implementar
funcionalidade
Terminou?
Não
Fim
Sim
Test-Driven
Development
(TDD)
Código que testa o código
Classe de Produção Classe de Testes
Test Doubles
Definição
• Código que testa o código
– O código testa o teste (?)
• Um por unidade de código
– Uma classe de teste por classe de código
– Vários métodos de teste por método de código
• Não interagem com elementos externos
• Automatizados
• Reproduzíveis
Mas isso não é
trabalho dobrado?
Uma análise do tempo gasto
Código sem testes
Código com testes
t
t
Benefícios
• Os erros aparecem cedo
– Reduz o ciclo de feedback
– Quem corrige é quem gerou
• Garante o comportamento correto do sistema
– Reduz a quantidade de erros
– Aumenta a “qualidade” dos erros
Benefícios (2)
• Rede de proteção
– Evita regressão
– Aumenta a confiança do desenvolvedor
– Encoraja refatoração
• Ajuda aos outros desenvolvedores
– Código mais limpo
– Documentação sempre atualizada
– Mais segurança pra mexer no código “dos outros”
Benefícios (3)
• Melhora o design do código
– Você escreve apenas o necessário para satisfazer
os requisitos dos testes
– O teste é seu primeiro “cliente”
• Continuous Delivery
– Mais segurança no deploy
Escrever testes unitário é fácil
[Test]
public void TesteDePotenciacao()
{
// Arrange
var calculadora = new Calculadora();
// Act
var resultado = calculadora.Eleva(3, 4);
// Assert
Assert.Equal(81, resultado);
}
O desafio é escrever código testável
Código testável
Teste
Código não testável
Tá, mas eu quero
ver um exemplo
disso na prática!
Test-First Development
• Escreva os testes antes de escrever o código
• Desenvolva a API que você gostaria de
consumir
• Antes de corrigir um erro, escreva um teste
que o exponha
• Nunca escreva código sem um teste falhando
Pontos de “costura”
• (Desnecessário)
• Construtor
• Propriedade
• Herde e sobrescreva
– Aumenta a legibilidade e a manutenibilidade do
teste
• Encapsule
– Reduz a manutenibilidade
O teste é mais
importante do que a
implementação
Nomenclatura
• Assembly.De.Codigo.Tests
– Vtex.Practices.ServiceModel.Tests
• ClasseDeCodigoTests
– HttpMethodResolverTests
• Metodo_de_testes_bem_descritivo
– Resolve_to_GET_when_using_HttpGet
Legibilidade
• Esconde os detalhes do Arrange
• Use somente uma linha no Act
• Não se preocupe tanto com DRY no Assert
Manutenibilidade
• Extraia a construção do objeto de teste
• Os testes não devem te atrasar
• Refatore o teste, também
Muito legal, mas por
onde eu começo?
Just Do It!
Um teste é melhor do que
nenhum
Priorize o núcleo do sistema
Comece pela parte mais fácil
• Métodos com entrada e saída bem definidas
• Métodos com poucas dependências
Erre bastante
• Pesquise
• Peça ajuda
• Aprenda
• Evolua
Ao estimar suas tarefas,
leve em conta o tempo
necessário para escrever os
testes
Mensagem final
Obrigado!
DÚVIDAS?
Referências
• http://elegantcode.com/2008/05/20/get-started-
writing-testable-code/
• http://www.martinfowler.com/bliki/TestDouble.h
tml
• http://googletesting.blogspot.com/2008/11/clean
-code-talks-unit-testing.html
• http://misko.hevery.com/attachments/Guide-
Writing%20Testable%20Code.pdf
• http://googletesting.blogspot.com/2008/08/by-
miko-hevery-so-you-decided-to.html
• http://hashbucket.wordpress.com/2009/01/12/u
nit-testing-internal-methods/
Livros

Mais conteúdo relacionado

Mais procurados

Automação de Teste Funcionais - Selenium
Automação de Teste Funcionais - SeleniumAutomação de Teste Funcionais - Selenium
Automação de Teste Funcionais - SeleniumIsrael Santiago
 
Automação de testes funcionais com selenium webdriver
Automação de testes funcionais com selenium webdriverAutomação de testes funcionais com selenium webdriver
Automação de testes funcionais com selenium webdriverQualister
 
Testes com TestLink e Selenium
Testes com TestLink e SeleniumTestes com TestLink e Selenium
Testes com TestLink e SeleniumAndré Thiago
 
Teste de aplicações web com selenium
Teste de aplicações web com seleniumTeste de aplicações web com selenium
Teste de aplicações web com seleniumMayron Cachina
 
Testes Unitários: Começando a escrever testes no seu dia-a-dia
Testes Unitários: Começando a escrever testes no seu dia-a-diaTestes Unitários: Começando a escrever testes no seu dia-a-dia
Testes Unitários: Começando a escrever testes no seu dia-a-diaAlex Tercete
 
Testando aplicações Flex com Selenium
Testando aplicações Flex com SeleniumTestando aplicações Flex com Selenium
Testando aplicações Flex com SeleniumVictor Serta
 
Não existe feedback melhor do que o do seu código
Não existe feedback melhor do que o do seu códigoNão existe feedback melhor do que o do seu código
Não existe feedback melhor do que o do seu códigoRenan Carvalho
 
Selenium Workshop
Selenium Workshop Selenium Workshop
Selenium Workshop Thoughtworks
 
Meetup SP - O QA & a Especificação Por Exemplo
Meetup SP - O QA & a Especificação Por ExemploMeetup SP - O QA & a Especificação Por Exemplo
Meetup SP - O QA & a Especificação Por ExemploSamanta Cicilia
 
[DevOps Carioca] Testes Automatizados
[DevOps Carioca] Testes Automatizados[DevOps Carioca] Testes Automatizados
[DevOps Carioca] Testes AutomatizadosSamanta Cicilia
 
TDD - Desenvolvendo softwares orientado à testes
TDD - Desenvolvendo softwares orientado à testesTDD - Desenvolvendo softwares orientado à testes
TDD - Desenvolvendo softwares orientado à testesThiago Lunardi
 
TOTVS - Agile Testing e a Importância de se ter Estratégia de Testes
TOTVS - Agile Testing e a Importância de se ter Estratégia de TestesTOTVS - Agile Testing e a Importância de se ter Estratégia de Testes
TOTVS - Agile Testing e a Importância de se ter Estratégia de TestesSamanta Cicilia
 
Coders On Beer + Ministry Of Testing - Agile Testing
Coders On Beer + Ministry Of Testing - Agile TestingCoders On Beer + Ministry Of Testing - Agile Testing
Coders On Beer + Ministry Of Testing - Agile TestingSamanta Cicilia
 

Mais procurados (20)

Hands On Selenium
Hands On SeleniumHands On Selenium
Hands On Selenium
 
Automação de Teste Funcionais - Selenium
Automação de Teste Funcionais - SeleniumAutomação de Teste Funcionais - Selenium
Automação de Teste Funcionais - Selenium
 
Selenium
SeleniumSelenium
Selenium
 
Automação de testes funcionais com selenium webdriver
Automação de testes funcionais com selenium webdriverAutomação de testes funcionais com selenium webdriver
Automação de testes funcionais com selenium webdriver
 
Testes com TestLink e Selenium
Testes com TestLink e SeleniumTestes com TestLink e Selenium
Testes com TestLink e Selenium
 
Teste de aplicações web com selenium
Teste de aplicações web com seleniumTeste de aplicações web com selenium
Teste de aplicações web com selenium
 
Testes Unitários: Começando a escrever testes no seu dia-a-dia
Testes Unitários: Começando a escrever testes no seu dia-a-diaTestes Unitários: Começando a escrever testes no seu dia-a-dia
Testes Unitários: Começando a escrever testes no seu dia-a-dia
 
Testando aplicações Flex com Selenium
Testando aplicações Flex com SeleniumTestando aplicações Flex com Selenium
Testando aplicações Flex com Selenium
 
Não existe feedback melhor do que o do seu código
Não existe feedback melhor do que o do seu códigoNão existe feedback melhor do que o do seu código
Não existe feedback melhor do que o do seu código
 
Selenium ide apresentação
Selenium ide   apresentaçãoSelenium ide   apresentação
Selenium ide apresentação
 
Selenium Workshop
Selenium Workshop Selenium Workshop
Selenium Workshop
 
Meetup SP - O QA & a Especificação Por Exemplo
Meetup SP - O QA & a Especificação Por ExemploMeetup SP - O QA & a Especificação Por Exemplo
Meetup SP - O QA & a Especificação Por Exemplo
 
[DevOps Carioca] Testes Automatizados
[DevOps Carioca] Testes Automatizados[DevOps Carioca] Testes Automatizados
[DevOps Carioca] Testes Automatizados
 
TDD na Prática
TDD na PráticaTDD na Prática
TDD na Prática
 
TDD - Desenvolvendo softwares orientado à testes
TDD - Desenvolvendo softwares orientado à testesTDD - Desenvolvendo softwares orientado à testes
TDD - Desenvolvendo softwares orientado à testes
 
TOTVS - Agile Testing e a Importância de se ter Estratégia de Testes
TOTVS - Agile Testing e a Importância de se ter Estratégia de TestesTOTVS - Agile Testing e a Importância de se ter Estratégia de Testes
TOTVS - Agile Testing e a Importância de se ter Estratégia de Testes
 
Desenvolvimento Guiado Por Testes
Desenvolvimento Guiado Por TestesDesenvolvimento Guiado Por Testes
Desenvolvimento Guiado Por Testes
 
Selenium
SeleniumSelenium
Selenium
 
Coders On Beer + Ministry Of Testing - Agile Testing
Coders On Beer + Ministry Of Testing - Agile TestingCoders On Beer + Ministry Of Testing - Agile Testing
Coders On Beer + Ministry Of Testing - Agile Testing
 
Testlink apresentacao
Testlink apresentacaoTestlink apresentacao
Testlink apresentacao
 

Semelhante a Por que você não escreve Testes Unitários?

Desenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesDesenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesCamilo Ribeiro
 
Desenvolvimento Guiado por Testes
Desenvolvimento Guiado por TestesDesenvolvimento Guiado por Testes
Desenvolvimento Guiado por Testeselliando dias
 
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
 
TDD para "meros mortais"
TDD para "meros mortais"TDD para "meros mortais"
TDD para "meros mortais"thiagobapt
 
Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1Diego Pacheco
 
Desenvolvimento em .Net - Testes Unitários
Desenvolvimento em .Net - Testes UnitáriosDesenvolvimento em .Net - Testes Unitários
Desenvolvimento em .Net - Testes UnitáriosVitor Silva
 
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
 
DevOps Summit Brasil: +10 Ferramentas para Melhorar a Qualidade do seu Software
DevOps Summit Brasil: +10 Ferramentas para Melhorar a Qualidade do seu SoftwareDevOps Summit Brasil: +10 Ferramentas para Melhorar a Qualidade do seu Software
DevOps Summit Brasil: +10 Ferramentas para Melhorar a Qualidade do seu SoftwareAndré Dias
 
UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27Hélio Medeiros
 
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
 
Os Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de softwareOs Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de softwareDextra Sistemas / Etec Itu
 

Semelhante a Por que você não escreve Testes Unitários? (20)

Desenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesDesenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por Testes
 
TDD
TDDTDD
TDD
 
Testes de Sofware
Testes de SofwareTestes de Sofware
Testes de Sofware
 
Desenvolvimento Guiado por Testes
Desenvolvimento Guiado por TestesDesenvolvimento Guiado por Testes
Desenvolvimento Guiado por Testes
 
1° Madrugada de Testes
1° Madrugada de Testes1° Madrugada de Testes
1° Madrugada de Testes
 
Unit test & TDD
Unit test & TDDUnit test & TDD
Unit test & TDD
 
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 TDD
Introdução a TDDIntrodução a TDD
Introdução a TDD
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven Development
 
TDD com Python (Completo)
TDD com Python (Completo)TDD com Python (Completo)
TDD com Python (Completo)
 
TDD para "meros mortais"
TDD para "meros mortais"TDD para "meros mortais"
TDD para "meros mortais"
 
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
Testes UnitáriosTestes Unitários
Testes Unitários
 
Desenvolvimento em .Net - Testes Unitários
Desenvolvimento em .Net - Testes UnitáriosDesenvolvimento em .Net - Testes Unitários
Desenvolvimento em .Net - Testes Unitários
 
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
 
DevOps Summit Brasil: +10 Ferramentas para Melhorar a Qualidade do seu Software
DevOps Summit Brasil: +10 Ferramentas para Melhorar a Qualidade do seu SoftwareDevOps Summit Brasil: +10 Ferramentas para Melhorar a Qualidade do seu Software
DevOps Summit Brasil: +10 Ferramentas para Melhorar a Qualidade do seu Software
 
UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27
 
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 ...
 
Os Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de softwareOs Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de software
 
Minicurso de TDD
Minicurso de TDDMinicurso de TDD
Minicurso de TDD
 

Por que você não escreve Testes Unitários?