SlideShare uma empresa Scribd logo
1 de 25
Testes Unitários
Começando a escrever testes no seu dia-a-dia
Alex Tercete
alex.matos@chemtech.com.br
27 de abril de 2011
Espera aí...
Você já falou disso!
O que mudou?
• Chemtech Coding Dojo
• Uso na prática
– SIMONS, ONS (Importação Automática)
– Viva 2.0, Coca-Cola (Aplicativo do Twitter)
– GERCAD, ONS (*)
Escrever código
Como desenvolvemos atualmente
Camada de
apresentação
(Web, 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)
Mas isso não é
trabalho dobrado?
Uma análise do tempo gasto no DDD
• “Clicar no botão”
– Levantar servidor de desenvolvimento
– Compilar páginas .aspx, .jsf, etc.
– Acessar manualmente a página e realizar os passos
para execução da funcionalidade
– Executar query no banco
• Debug
– Adicionar/remover breakpoints e watches
– Depurar o código linha a linha
• Paciência
• Atenção
Os benefícios do TDD
• Código desacoplado e com bom design
• Robustez
• Evita problemas de regressão
• Aumenta a confiança do desenvolvedor
Por que ainda não
estou fazendo isso?
Escrever testes unitários é fácil
[Fact]
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
Escrever código testável é difícil
• Quebra de hábitos antigos
• Aprender nova forma de pensar/trabalhar
• Algumas tecnologias são naturalmente mais
difíceis de testar
– Interface Gráfica
– Stored Procedures
– Componentes de terceiros
– etc.
A mudança não é instantânea
• No início você vai escrever código “mais ou
menos” testável
• Você vai errar
• Você vai desejar ter feito as coisas de forma
diferente
• Você vai evoluir
• Você não vai mais conseguir desenvolver de
outra maneira
Tá, mas eu quero
ver um exemplo
disso na prática!
Um exemplo
• Ideias?!
Organizando seu Projeto
• Separar o projeto/pacote contendo os testes
– <NomeDoProjeto>
– <NomeDoProjeto>.Testes
• Acessando métodos internos
– Properties/AssemblyInfo.cs
[assembly: InternalsVisibleTo("<NomeDoProjeto>.Testes")]
Test Doubles
• Dummy
– Nunca é usado
• Fake
– Implementação do objeto real, mas com “atalhos”
• Stubs
– Não fazem nada
• Spies
– Stubs que registram informações sobre as chamadas
• Mocks
– Imitações do objeto real, para chamadas específicas
Depurando os testes unitários
• GUI Runner
• Debug > Attach to Process...
• Rodar testes
Como começar?
O que você pode fazer
• Just Do It!
• Estime o tempo das suas tarefas levando em
conta os testes unitários
• Comece testando o que for mais fácil
• Dê prioridade à lógica principal da aplicação
• Mostre aos seus colegas os benefícios que os
testes unitários podem trazer
• Pesquise, estude e peça ajuda
Vivemos na era da informação
Referências
• http://elegantcode.com/2008/05/20/get-started-
writing-testable-code/
• http://www.martinfowler.com/bliki/TestDouble.html
• 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/unit-
testing-internal-methods/
Dúvidas?

Mais conteúdo relacionado

Mais procurados

[MTC 2021] Tests smells: aquele cheirinho de que algo não está bom no seu cód...
[MTC 2021] Tests smells: aquele cheirinho de que algo não está bom no seu cód...[MTC 2021] Tests smells: aquele cheirinho de que algo não está bom no seu cód...
[MTC 2021] Tests smells: aquele cheirinho de que algo não está bom no seu cód...minastestingconference
 
Zend Framework Estrutura e TDD
Zend Framework Estrutura e TDDZend Framework Estrutura e TDD
Zend Framework Estrutura e TDDPHP Day Curitiba
 
Por que automatizar testes de software?
Por que automatizar testes de software?Por que automatizar testes de software?
Por que automatizar testes de software?Samuel Lourenço
 
Seja um júnior não seja um sobrinho
Seja um júnior não seja um sobrinhoSeja um júnior não seja um sobrinho
Seja um júnior não seja um sobrinhoAlexandre Andrade
 
Introdução ao TDD (Test-Driven Development) - #guma10anos
Introdução ao TDD (Test-Driven Development) - #guma10anosIntrodução ao TDD (Test-Driven Development) - #guma10anos
Introdução ao TDD (Test-Driven Development) - #guma10anosDionatan default
 
Boas práticas no desenvolvimento de software através do uso de TDD
Boas práticas no desenvolvimento de software através do uso de TDDBoas práticas no desenvolvimento de software através do uso de TDD
Boas práticas no desenvolvimento de software através do uso de TDDJony Ferreira dos Santos
 
Testes Automatizados de Software
Testes Automatizados de SoftwareTestes Automatizados de Software
Testes Automatizados de SoftwareMaurício Aniche
 
Verdades e mitos sobre testes que eu gostaria
Verdades e mitos sobre testes que eu gostariaVerdades e mitos sobre testes que eu gostaria
Verdades e mitos sobre testes que eu gostariaLivia Gabos
 
Eu não sou um "bom programador"!
Eu não sou um "bom programador"!Eu não sou um "bom programador"!
Eu não sou um "bom programador"!Gustavo Pereira
 
Introdução a testes automatizados
Introdução a testes automatizadosIntrodução a testes automatizados
Introdução a testes automatizadosThiago Ghisi
 
Como convenci meu chefe que devíamos automatizar testes - Marcelo Soares - TD...
Como convenci meu chefe que devíamos automatizar testes - Marcelo Soares - TD...Como convenci meu chefe que devíamos automatizar testes - Marcelo Soares - TD...
Como convenci meu chefe que devíamos automatizar testes - Marcelo Soares - TD...Marcelo Soares
 
GDG DevFest Paraná 2017 - Pare de Testar em Produção e Comece a Mockar
GDG DevFest Paraná 2017 -  Pare de Testar em Produção e Comece a MockarGDG DevFest Paraná 2017 -  Pare de Testar em Produção e Comece a Mockar
GDG DevFest Paraná 2017 - Pare de Testar em Produção e Comece a MockarDanilo Porcelani
 
Test Driven Development (TDD) para seres humanos.
Test Driven Development (TDD) para seres humanos.Test Driven Development (TDD) para seres humanos.
Test Driven Development (TDD) para seres humanos.Rômulo Augusto Santos
 
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!Leandro Nishijima
 
Test-driven development & Mocking
Test-driven development & MockingTest-driven development & Mocking
Test-driven development & MockingDaniel Tamiosso
 
TDC 2014 POA - Clean Code para Testers
TDC 2014 POA - Clean Code para TestersTDC 2014 POA - Clean Code para Testers
TDC 2014 POA - Clean Code para TestersStefan Teixeira
 

Mais procurados (20)

[MTC 2021] Tests smells: aquele cheirinho de que algo não está bom no seu cód...
[MTC 2021] Tests smells: aquele cheirinho de que algo não está bom no seu cód...[MTC 2021] Tests smells: aquele cheirinho de que algo não está bom no seu cód...
[MTC 2021] Tests smells: aquele cheirinho de que algo não está bom no seu cód...
 
Behaviour Driven Development
Behaviour Driven DevelopmentBehaviour Driven Development
Behaviour Driven Development
 
Introdução ao XP
Introdução ao XPIntrodução ao XP
Introdução ao XP
 
Zend Framework Estrutura e TDD
Zend Framework Estrutura e TDDZend Framework Estrutura e TDD
Zend Framework Estrutura e TDD
 
Por que automatizar testes de software?
Por que automatizar testes de software?Por que automatizar testes de software?
Por que automatizar testes de software?
 
Seja um júnior não seja um sobrinho
Seja um júnior não seja um sobrinhoSeja um júnior não seja um sobrinho
Seja um júnior não seja um sobrinho
 
Introdução ao TDD (Test-Driven Development) - #guma10anos
Introdução ao TDD (Test-Driven Development) - #guma10anosIntrodução ao TDD (Test-Driven Development) - #guma10anos
Introdução ao TDD (Test-Driven Development) - #guma10anos
 
Boas práticas no desenvolvimento de software através do uso de TDD
Boas práticas no desenvolvimento de software através do uso de TDDBoas práticas no desenvolvimento de software através do uso de TDD
Boas práticas no desenvolvimento de software através do uso de TDD
 
Testes Automatizados de Software
Testes Automatizados de SoftwareTestes Automatizados de Software
Testes Automatizados de Software
 
Verdades e mitos sobre testes que eu gostaria
Verdades e mitos sobre testes que eu gostariaVerdades e mitos sobre testes que eu gostaria
Verdades e mitos sobre testes que eu gostaria
 
TDD
TDDTDD
TDD
 
Eu não sou um "bom programador"!
Eu não sou um "bom programador"!Eu não sou um "bom programador"!
Eu não sou um "bom programador"!
 
Introdução a testes automatizados
Introdução a testes automatizadosIntrodução a testes automatizados
Introdução a testes automatizados
 
Como convenci meu chefe que devíamos automatizar testes - Marcelo Soares - TD...
Como convenci meu chefe que devíamos automatizar testes - Marcelo Soares - TD...Como convenci meu chefe que devíamos automatizar testes - Marcelo Soares - TD...
Como convenci meu chefe que devíamos automatizar testes - Marcelo Soares - TD...
 
GDG DevFest Paraná 2017 - Pare de Testar em Produção e Comece a Mockar
GDG DevFest Paraná 2017 -  Pare de Testar em Produção e Comece a MockarGDG DevFest Paraná 2017 -  Pare de Testar em Produção e Comece a Mockar
GDG DevFest Paraná 2017 - Pare de Testar em Produção e Comece a Mockar
 
Test Driven Development (TDD) para seres humanos.
Test Driven Development (TDD) para seres humanos.Test Driven Development (TDD) para seres humanos.
Test Driven Development (TDD) para seres humanos.
 
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!
 
1° Madrugada de Testes
1° Madrugada de Testes1° Madrugada de Testes
1° Madrugada de Testes
 
Test-driven development & Mocking
Test-driven development & MockingTest-driven development & Mocking
Test-driven development & Mocking
 
TDC 2014 POA - Clean Code para Testers
TDC 2014 POA - Clean Code para TestersTDC 2014 POA - Clean Code para Testers
TDC 2014 POA - Clean Code para Testers
 

Semelhante a Testes Unitários Começando

Qualidade de software com Visual Studio ALM
Qualidade de software com Visual Studio ALMQualidade de software com Visual Studio ALM
Qualidade de software com Visual Studio ALMAdriano Bertucci
 
Por quê você deve utilizar TDD?
Por quê você deve utilizar TDD?Por quê você deve utilizar TDD?
Por quê você deve utilizar TDD?Wellington Moreira
 
Como testar sua aplicação Android com Robotium
Como testar sua aplicação Android com RobotiumComo testar sua aplicação Android com Robotium
Como testar sua aplicação Android com RobotiumThayse Severiano
 
TDD para "meros mortais"
TDD para "meros mortais"TDD para "meros mortais"
TDD para "meros mortais"thiagobapt
 
Menos teste e mais qualidade - como equilibrar essa equação?
Menos teste e mais qualidade - como equilibrar essa equação?Menos teste e mais qualidade - como equilibrar essa equação?
Menos teste e mais qualidade - como equilibrar essa equação?Igor Abade
 
Desenvolvimento orientado a testes
Desenvolvimento orientado a testesDesenvolvimento orientado a testes
Desenvolvimento orientado a testesCarlos Santana
 
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 Guiado por Testes
Desenvolvimento Guiado por TestesDesenvolvimento Guiado por Testes
Desenvolvimento Guiado por Testeselliando dias
 
Greenbar - Testes automatizados na sua empresa
Greenbar - Testes automatizados na sua empresaGreenbar - Testes automatizados na sua empresa
Greenbar - Testes automatizados na sua empresaRafael Ponte
 
Automacao de Testes - do zero ao clean code
Automacao de Testes - do zero ao clean codeAutomacao de Testes - do zero ao clean code
Automacao de Testes - do zero ao clean codeJoyce Bastos
 
Scrum Gathering Rio 2014 - Melhorando sua Estratégia de Testes Automatizados
Scrum Gathering Rio 2014 - Melhorando sua Estratégia de Testes AutomatizadosScrum Gathering Rio 2014 - Melhorando sua Estratégia de Testes Automatizados
Scrum Gathering Rio 2014 - Melhorando sua Estratégia de Testes AutomatizadosStefan Teixeira
 
Como aumentar a produtividade da sua equipe
Como aumentar a produtividade da sua equipeComo aumentar a produtividade da sua equipe
Como aumentar a produtividade da sua equipeWende Mendes
 
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
 
Automação de Teste em Front End - Caipira Ágil
Automação de Teste em Front End - Caipira ÁgilAutomação de Teste em Front End - Caipira Ágil
Automação de Teste em Front End - Caipira ÁgilElias Nogueira
 
UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27Hélio Medeiros
 
Desenvolvimento em .Net - Testes Unitários
Desenvolvimento em .Net - Testes UnitáriosDesenvolvimento em .Net - Testes Unitários
Desenvolvimento em .Net - Testes UnitáriosVitor Silva
 

Semelhante a Testes Unitários Começando (20)

Qualidade de software com Visual Studio ALM
Qualidade de software com Visual Studio ALMQualidade de software com Visual Studio ALM
Qualidade de software com Visual Studio ALM
 
Por quê você deve utilizar TDD?
Por quê você deve utilizar TDD?Por quê você deve utilizar TDD?
Por quê você deve utilizar TDD?
 
Como testar sua aplicação Android com Robotium
Como testar sua aplicação Android com RobotiumComo testar sua aplicação Android com Robotium
Como testar sua aplicação Android com Robotium
 
TDD para "meros mortais"
TDD para "meros mortais"TDD para "meros mortais"
TDD para "meros mortais"
 
Menos teste e mais qualidade - como equilibrar essa equação?
Menos teste e mais qualidade - como equilibrar essa equação?Menos teste e mais qualidade - como equilibrar essa equação?
Menos teste e mais qualidade - como equilibrar essa equação?
 
Desenvolvimento orientado a testes
Desenvolvimento orientado a testesDesenvolvimento orientado a testes
Desenvolvimento orientado a testes
 
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 Guiado por Testes
Desenvolvimento Guiado por TestesDesenvolvimento Guiado por Testes
Desenvolvimento Guiado por Testes
 
Greenbar - Testes automatizados na sua empresa
Greenbar - Testes automatizados na sua empresaGreenbar - Testes automatizados na sua empresa
Greenbar - Testes automatizados na sua empresa
 
Automacao de Testes - do zero ao clean code
Automacao de Testes - do zero ao clean codeAutomacao de Testes - do zero ao clean code
Automacao de Testes - do zero ao clean code
 
Scrum Gathering Rio 2014 - Melhorando sua Estratégia de Testes Automatizados
Scrum Gathering Rio 2014 - Melhorando sua Estratégia de Testes AutomatizadosScrum Gathering Rio 2014 - Melhorando sua Estratégia de Testes Automatizados
Scrum Gathering Rio 2014 - Melhorando sua Estratégia de Testes Automatizados
 
TDD para Java EE
TDD para Java EETDD para Java EE
TDD para Java EE
 
Como aumentar a produtividade da sua equipe
Como aumentar a produtividade da sua equipeComo aumentar a produtividade da sua equipe
Como aumentar a produtividade da sua equipe
 
Teste automatizados e tdd
Teste automatizados e tddTeste automatizados e tdd
Teste automatizados e tdd
 
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
 
JUnit Experience
JUnit ExperienceJUnit Experience
JUnit Experience
 
Automação de Teste em Front End - Caipira Ágil
Automação de Teste em Front End - Caipira ÁgilAutomação de Teste em Front End - Caipira Ágil
Automação de Teste em Front End - Caipira Ágil
 
UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27
 
Desenvolvimento em .Net - Testes Unitários
Desenvolvimento em .Net - Testes UnitáriosDesenvolvimento em .Net - Testes Unitários
Desenvolvimento em .Net - Testes Unitários
 

Testes Unitários Começando

  • 1. Testes Unitários Começando a escrever testes no seu dia-a-dia Alex Tercete alex.matos@chemtech.com.br 27 de abril de 2011
  • 2. Espera aí... Você já falou disso!
  • 3. O que mudou? • Chemtech Coding Dojo • Uso na prática – SIMONS, ONS (Importação Automática) – Viva 2.0, Coca-Cola (Aplicativo do Twitter) – GERCAD, ONS (*)
  • 4. Escrever código Como desenvolvemos atualmente Camada de apresentação (Web, UI) Camada de Serviço Camada de Lógica Camada de Acesso a Dados “Clicar no botão” Funcionou? DEBUG Não Comemorar! Sim
  • 6. 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
  • 8. Mas isso não é trabalho dobrado?
  • 9. Uma análise do tempo gasto no DDD • “Clicar no botão” – Levantar servidor de desenvolvimento – Compilar páginas .aspx, .jsf, etc. – Acessar manualmente a página e realizar os passos para execução da funcionalidade – Executar query no banco • Debug – Adicionar/remover breakpoints e watches – Depurar o código linha a linha • Paciência • Atenção
  • 10. Os benefícios do TDD • Código desacoplado e com bom design • Robustez • Evita problemas de regressão • Aumenta a confiança do desenvolvedor
  • 11. Por que ainda não estou fazendo isso?
  • 12. Escrever testes unitários é fácil [Fact] public void TesteDePotenciacao() { // Arrange var calculadora = new Calculadora(); // Act var resultado = calculadora.Eleva(3, 4); // Assert Assert.Equal(81, resultado); }
  • 13. O desafio é escrever código testável
  • 14. Escrever código testável é difícil • Quebra de hábitos antigos • Aprender nova forma de pensar/trabalhar • Algumas tecnologias são naturalmente mais difíceis de testar – Interface Gráfica – Stored Procedures – Componentes de terceiros – etc.
  • 15. A mudança não é instantânea • No início você vai escrever código “mais ou menos” testável • Você vai errar • Você vai desejar ter feito as coisas de forma diferente • Você vai evoluir • Você não vai mais conseguir desenvolver de outra maneira
  • 16. Tá, mas eu quero ver um exemplo disso na prática!
  • 18. Organizando seu Projeto • Separar o projeto/pacote contendo os testes – <NomeDoProjeto> – <NomeDoProjeto>.Testes • Acessando métodos internos – Properties/AssemblyInfo.cs [assembly: InternalsVisibleTo("<NomeDoProjeto>.Testes")]
  • 19. Test Doubles • Dummy – Nunca é usado • Fake – Implementação do objeto real, mas com “atalhos” • Stubs – Não fazem nada • Spies – Stubs que registram informações sobre as chamadas • Mocks – Imitações do objeto real, para chamadas específicas
  • 20. Depurando os testes unitários • GUI Runner • Debug > Attach to Process... • Rodar testes
  • 22. O que você pode fazer • Just Do It! • Estime o tempo das suas tarefas levando em conta os testes unitários • Comece testando o que for mais fácil • Dê prioridade à lógica principal da aplicação • Mostre aos seus colegas os benefícios que os testes unitários podem trazer • Pesquise, estude e peça ajuda
  • 23. Vivemos na era da informação
  • 24. Referências • http://elegantcode.com/2008/05/20/get-started- writing-testable-code/ • http://www.martinfowler.com/bliki/TestDouble.html • 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/unit- testing-internal-methods/