25
Testes Unitários Começando a escrever testes no seu dia-a-dia Alex Tercete [email protected] 27 de abril de 2011

Testes Unitários: Começando a escrever testes no seu dia-a-dia

Embed Size (px)

Citation preview

Page 1: 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-dia

Alex [email protected]

27 de abril de 2011

Page 2: Testes Unitários: Começando a escrever testes no seu dia-a-dia

Espera aí...

Você já falou disso!

Page 3: Testes Unitários: Começando a escrever testes no seu dia-a-dia

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 (*)

Page 4: Testes Unitários: Começando a escrever testes no seu dia-a-dia

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? DEBUGNão

Comemorar!

Sim

Page 5: Testes Unitários: Começando a escrever testes no seu dia-a-dia

Debug-Driven Development

(DDD)

Page 6: Testes Unitários: Começando a escrever testes no seu dia-a-dia

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

Page 7: Testes Unitários: Começando a escrever testes no seu dia-a-dia

Test-Driven Development

(TDD)

Page 8: Testes Unitários: Começando a escrever testes no seu dia-a-dia

Mas isso não é trabalho dobrado?

Page 9: Testes Unitários: Começando a escrever testes no seu dia-a-dia

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

Page 10: Testes Unitários: Começando a escrever testes no seu dia-a-dia

Os benefícios do TDD

• Código desacoplado e com bom design• Robustez• Evita problemas de regressão• Aumenta a confiança do desenvolvedor

Page 11: Testes Unitários: Começando a escrever testes no seu dia-a-dia

Por que ainda não estou fazendo isso?

Page 12: Testes Unitários: Começando a escrever testes no seu dia-a-dia

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);}

Page 13: Testes Unitários: Começando a escrever testes no seu dia-a-dia

O desafio é escrever código testável

Page 14: Testes Unitários: Começando a escrever testes no seu dia-a-dia

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.

Page 15: Testes Unitários: Começando a escrever testes no seu dia-a-dia

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

Page 16: Testes Unitários: Começando a escrever testes no seu dia-a-dia

Tá, mas eu quero ver um exemplo disso na prática!

Page 17: Testes Unitários: Começando a escrever testes no seu dia-a-dia

Um exemplo

• Ideias?!

Page 18: Testes Unitários: Começando a escrever testes no seu dia-a-dia

Organizando seu Projeto

• Separar o projeto/pacote contendo os testes– <NomeDoProjeto>– <NomeDoProjeto>.Testes

• Acessando métodos internos– Properties/AssemblyInfo.cs

[assembly: InternalsVisibleTo("<NomeDoProjeto>.Testes")]

Page 19: Testes Unitários: Começando a escrever testes no seu dia-a-dia

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

Page 20: Testes Unitários: Começando a escrever testes no seu dia-a-dia

Depurando os testes unitários

• GUI Runner• Debug > Attach to Process...• Rodar testes

Page 21: Testes Unitários: Começando a escrever testes no seu dia-a-dia

Como começar?

Page 22: Testes Unitários: Começando a escrever testes no seu dia-a-dia

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

Page 23: Testes Unitários: Começando a escrever testes no seu dia-a-dia

Vivemos na era da informação

Page 24: Testes Unitários: Começando a escrever testes no seu dia-a-dia

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/

Page 25: Testes Unitários: Começando a escrever testes no seu dia-a-dia

Dúvidas?