Globalcode – open4educationVinicius Quaiato @vquaiato http://viniciusquaiato.com
Testes na plataforma .NET
Começando a desenvolver com confiança
Globalcode – open4educationVinicius Quaiato @vquaiato http://viniciusquaiato.com
About: Vinicius Quaiato
• Arquitetura e desenvolvimento
• Apaixonado pelo que faz
• Apaixonado por testes
• .NET Architects
• .NET Magazine
• Vegetariano
• Pai
• Santista
• Geek
Globalcode – open4educationVinicius Quaiato @vquaiato http://viniciusquaiato.com
Contact: me
• http://viniciusquaiato.com
• vinicius.quaiato@gmail.com
– msn e gtalk
• @vquaiato
Globalcode – open4educationVinicius Quaiato @vquaiato http://viniciusquaiato.com
Lambda3
• Parceria
• http://lambda3.com.br
Globalcode – open4educationVinicius Quaiato @vquaiato http://viniciusquaiato.com
Objetivos
Globalcode – open4educationVinicius Quaiato @vquaiato http://viniciusquaiato.com
About: you
• Nome
• Expectativa
Globalcode – open4educationVinicius Quaiato @vquaiato http://viniciusquaiato.com
Globalcode – open4educationVinicius Quaiato @vquaiato http://viniciusquaiato.com
Fazer software dói
Globalcode – open4educationVinicius Quaiato @vquaiato http://viniciusquaiato.com
Fazer software cansa
Globalcode – open4education0 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Fazer software é difícil
Globalcode – open4education1 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Mas...
Globalcode – open4education2 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Precisa ser diferente!
Globalcode – open4education3 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Razões e problemas
• Difícil manter
• Difícil evoluir
• Bugs persistentes
• Correção gera outros bugs
• Medo mexer no código
• Perda de tempo
Globalcode – open4education4 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
And the life becomes sad...
Globalcode – open4education5 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Mas...
Globalcode – open4education6 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
O que são testes?
• Forma de garantir que o software:
– Atende aos propósitos de negócio
– Funciona como esperado
Globalcode – open4education7 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
O que são testes?
• Maneira verificável de garantir que o
software atende às necessidades de
negócio e que funciona como esperado.
Globalcode – open4education8 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Por que testar?
• Saber que algo funciona
Globalcode – open4education9 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Por que testar?
• Saber que algo terminou, ficou pronto
Globalcode – open4education0 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Como testamos hoje?
Globalcode – open4education1 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Ctrl + Shift + B
Globalcode – open4education2 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Ctrl + Shift + B
• Compilar NÃO é testar!
• Apenas significa que o código atende ao
compilador, apenas isso!
Globalcode – open4education3 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
F5
Globalcode – open4education4 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
F5
• Executar a aplicação demora
• No geral testa-se apenas o que você
pensa que alterou
O bater de asas de uma borboleta em Tóquio pode provocar um
furacão em Nova Iorque
“
”
Globalcode – open4education5 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Monkey
Globalcode – open4education6 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Monkey
• Executar a aplicação demora
• É bom para encontrar alguns bugs
• Testes não são apenas sobre bugs!
Globalcode – open4education7 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Testers
Globalcode – open4education8 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Testers
• São importantes!
• Executar a aplicação demora!
• Feedback demora!
• Bom para encontrar bugs
• Código construído sobre bug gera mais
bugs!
Globalcode – open4education9 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
O que são testes?
• Maneira verificável de garantir que o
software atende às necessidades de
negócio e que funciona como esperado.
• Temos isso?
Globalcode – open4education0 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Por que não testar?
Globalcode – open4education1 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Por que não testar?
• Demora
Globalcode – open4education2 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Por que não testar?
• Eu sou senior!
Globalcode – open4education3 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Por que não testar?
• Estamos sem tempo
Globalcode – open4education4 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Bad news...
Mentir
!
Globalcode – open4education5 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Por que não testar?
• Acredite: você não é bom o bastante!
• Testar pode consumir algum tempo, mas
é necessário!
• Deixar de testar não te faz mais rápido, dá
apenas uma falsa sensação de
velocidade.
Globalcode – open4education6 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
É uma cilada Bino!
Globalcode – open4education7 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Vamos aproveitar a vida!
Globalcode – open4education8 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Unit Tests
• Testes unitários
• Pedaço de código
• Executa outro pedaço de código
• Verifica se tudo está correto
Globalcode – open4education9 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Unit Tests
• Escritos pelo desenvolvedor
• Rápidos de excutar
• Testam uma única unidade de código
Globalcode – open4education0 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Unit Tests
• Testes de unidade!
– Unidade é um método ou função, uma
operação
• SUT
– System Under Test
• Class
• Method
• Code
Globalcode – open4education1 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Unit Tests
• Executam de forma automatizada
• São repetíveis
• Qualquer um pode executar
• One click execution!
Globalcode – open4education2 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Unit Tests
• Provém feedback quase instantâneo
• Auxiliam o design da funcionalidade
– Escrever testes tem de ser fácil
– Está difícil? Refatore!
• Ajudam a realizar alterações
• Ajudam com regressões
– Algo que funcionava e não funciona mais
Globalcode – open4education3 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Unit Tests
• E as desvantagens...
Globalcode – open4education4 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Demo
• Nosso primeiro Unit Test
Globalcode – open4education5 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
MSTest
• Framework de Testes da Microsoft
• Fornece ferramentas necessárias para
Unit Testing
• Ferramenta Command Line para executar
Unit Tests
Globalcode – open4education6 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
MSTest
• Atributos para criação de testes
– [TestClass]
– [TestMethod]
• Métodos para asserção dos testes
– Assert methods
• Rodador de testes integrado com Visual
Studio
Globalcode – open4education7 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Demo
• Conhecendo os atributos e métodos de Assert
Globalcode – open4education8 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Framework e Runner
• O teste é diferente de quem executa o
teste
Globalcode – open4education9 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Framework e Runner
• Framework é um conjunto de bibliotecas
• Contém métodos de assert, atributos,
helpers, define estrutura dos testes
• MSTest, NUnit, MbUnit, etc.
Globalcode – open4education0 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Framework e Runner
• Runner, ou rodador, é quem de fato
executa os testes
• Um runner pode executar testes de vários
frameworks
• Pode ser integrado a IDE, ser um
command line ou um .exe
Globalcode – open4education1 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Demo
• Diferença entre framework e runner
Globalcode – open4education2 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Anatomia AAA
• Testes no geral são curtos
• Basicamente seguem o padrão AAA
• Arrange
• Act
• Assert
Globalcode – open4education3 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Anatomia AAA
• Arrange
– Você prepara o ambiente para o teste
– Configura variáveis, objetos, monta relações
– Prepara tudo que for necessário para que o
teste execute
Globalcode – open4education4 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Sobre o Arrange
• Em algumas situações o Arrange pode ser
reaproveitado
– [Setup]
– [TestInitialize]
– [FixtureSetup]
• O Arrange pode ser extenso
Globalcode – open4education5 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Arrange extenso
Globalcode – open4education6 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Anatomia AAA
• Act
– É a execução do SUT
– É a chamada para o método que está sendo
testado
– É a execução da operação a ser testada
Globalcode – open4education7 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Sobre o Act
• Um teste deve atuar independente dos
outros
• Um Act com muitos métodos é sinal de
problema
Globalcode – open4education8 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Anatomia AAA
• Assert
– É a verificação do resultado
– Neste ponto faz-se a análise do resultado do
Act com o que era esperado
Globalcode – open4education9 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Sobre o Assert
• Um teste no geral tem apenas um Assert
• Mais de um Assert no teste mascara erros
Globalcode – open4education0 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Demo
• Conhecendo a anatomia AAA de um teste
• setup e teardown
Globalcode – open4education1 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
NUnit
• Framework de unit testing
• Portado do JUnit
• Hoje é 100% escrito em C#
• Um dos frameworks mais utilizados
Globalcode – open4education2 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
NUnit
• Interfaces fluentes
• Asserções mais legíveis
• Mais opções de asserções
Globalcode – open4education3 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Demo
• Conhecendo o NUnit
Globalcode – open4education4 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Exceptions
• E quando queremos uma exception?
• Exceptions podem ser regras de negócio
• Geralmente uma exception falha o teste
• Precisamos deixar claro que queremos
isto ou não
Globalcode – open4education5 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Demos
• Exceptions no MSTest
• Exceptions no NUnit
Globalcode – open4education6 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
TDD
• Test Driven Development
Globalcode – open4education7 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Não é (só)sobre testes
Globalcode – open4education8 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
TDD
• Basicamente segue o mantra:
– Red, green, refactor
• Escreva um teste que falhe
• Faça o teste passar
• Refatore/melhor o código
Globalcode – open4education9 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
TDD
• Escrever os testes antes do código de
produção
• Escrever código que o teste pediu
• Resultados:
– Testes
– Melhor design
• Menos acoplamento (acoplamento estável)
• Classes e métodos coesos
• Clareza no código
Globalcode – open4education0 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
TDD
• Por que teste antes?
– O teste é o primeiro cliente do seu código
– Faça como você gostaria que fosse
– Ficou difícil? Talvez seja melhor pensar mais
Globalcode – open4education1 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
TDD
Globalcode – open4education2 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
TDD
• Vicia!
Globalcode – open4education3 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Demo
• Praticando um pouco de TDD
Globalcode – open4education4 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Stubs e Mocks
• Servem para gerenciarmos dependências
nos testes
• Ambos são objetos fake, “imitam” objetos
reais
• São muito parecidos, mas têm propósitos
distintos
Globalcode – open4education5 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Stubs
• Substitui de forma controlável uma
dependência externa
• Mantém o teste em nossas mãos
– Repetível
– Rápido
– Isolado
• Um Stub não fará o teste falhar
• Asserts não são feitos contra os Stubs
• Fornecem algum estado para o SUT
Globalcode – open4education6 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Demo
• Conhecendo um Stub
Globalcode – open4education7 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Mocks
• É um objeto que reage às interações com
o SUT
• Tem poder para falhar o teste
• Assert é realizado contra o mock
• Um mock por teste
– SRP até no teste!
Globalcode – open4education8 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Demo
• Conhecendo um Mock
Globalcode – open4education9 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Stubs e Mocks
• Indispensáveis
• Sem eles testar é doloroso e custoso
• Criá-los na mão é doloroso e custoso
• Gera muito retrabalho
• Gasta-se muito tempo
• Testar fica chato!
Globalcode – open4education0 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Frameworks de Mock
• Frameworks de isolamento
• Criam Mocks e Stubs de forma simples
• Não há retrabalho
• Lidam com vários tipos de configuração,
sem causar dores
Globalcode – open4education1 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Frameworks de isolamento
• Moq
• Rhino Mocks
• TypeMock/Isolator 2010
• JustMock
Globalcode – open4education2 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Moq
• Fala-se: Mock you!
• API bastante simples
• Usa .NET 3.5
– Lambdas e Linq
• Cria Stubs e Mocks
Globalcode – open4education3 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Demo
• Utilizando Moq com Stubs e Mocks
Globalcode – open4education4 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Links
• http://msdn.microsoft.com/en-us/library/ms182489%28VS.80%29.aspx
• http://code.google.com/p/moq/
• http://www.nunit.org/
• http://www.ayende.com/projects/rhino-mocks.aspx
• http://www.testdriven.net/
• http://martinfowler.com/articles/mocksArentStubs.html
• http://vimeo.com/user3553347/videos
• http://viniciusquaiato.com/blog/category/tdd/
• http://www.aniche.com.br/
Globalcode – open4education5 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Books
• The Art of Unit Testing
• Test Driven Development by example
• Growing Object-Oriented Software Guided
by Tests
Globalcode – open4education6 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Contact: me
• http://viniciusquaiato.com
• vinicius.quaiato@gmail.com
– msn e gtalk
• @vquaiato
Globalcode – open4education7 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
So...
• Thank you!

Minicurso Testes em .NET - Globalcode Vinicius Quaiato

  • 1.
    Globalcode – open4educationViniciusQuaiato @vquaiato http://viniciusquaiato.com Testes na plataforma .NET Começando a desenvolver com confiança
  • 2.
    Globalcode – open4educationViniciusQuaiato @vquaiato http://viniciusquaiato.com About: Vinicius Quaiato • Arquitetura e desenvolvimento • Apaixonado pelo que faz • Apaixonado por testes • .NET Architects • .NET Magazine • Vegetariano • Pai • Santista • Geek
  • 3.
    Globalcode – open4educationViniciusQuaiato @vquaiato http://viniciusquaiato.com Contact: me • http://viniciusquaiato.com • vinicius.quaiato@gmail.com – msn e gtalk • @vquaiato
  • 4.
    Globalcode – open4educationViniciusQuaiato @vquaiato http://viniciusquaiato.com Lambda3 • Parceria • http://lambda3.com.br
  • 5.
    Globalcode – open4educationViniciusQuaiato @vquaiato http://viniciusquaiato.com Objetivos
  • 6.
    Globalcode – open4educationViniciusQuaiato @vquaiato http://viniciusquaiato.com About: you • Nome • Expectativa
  • 7.
    Globalcode – open4educationViniciusQuaiato @vquaiato http://viniciusquaiato.com
  • 8.
    Globalcode – open4educationViniciusQuaiato @vquaiato http://viniciusquaiato.com Fazer software dói
  • 9.
    Globalcode – open4educationViniciusQuaiato @vquaiato http://viniciusquaiato.com Fazer software cansa
  • 10.
    Globalcode – open4education0Vinicius Quaiato @vquaiato http://viniciusquaiato.com Fazer software é difícil
  • 11.
    Globalcode – open4education1Vinicius Quaiato @vquaiato http://viniciusquaiato.com Mas...
  • 12.
    Globalcode – open4education2Vinicius Quaiato @vquaiato http://viniciusquaiato.com Precisa ser diferente!
  • 13.
    Globalcode – open4education3Vinicius Quaiato @vquaiato http://viniciusquaiato.com Razões e problemas • Difícil manter • Difícil evoluir • Bugs persistentes • Correção gera outros bugs • Medo mexer no código • Perda de tempo
  • 14.
    Globalcode – open4education4Vinicius Quaiato @vquaiato http://viniciusquaiato.com And the life becomes sad...
  • 15.
    Globalcode – open4education5Vinicius Quaiato @vquaiato http://viniciusquaiato.com Mas...
  • 16.
    Globalcode – open4education6Vinicius Quaiato @vquaiato http://viniciusquaiato.com O que são testes? • Forma de garantir que o software: – Atende aos propósitos de negócio – Funciona como esperado
  • 17.
    Globalcode – open4education7Vinicius Quaiato @vquaiato http://viniciusquaiato.com O que são testes? • Maneira verificável de garantir que o software atende às necessidades de negócio e que funciona como esperado.
  • 18.
    Globalcode – open4education8Vinicius Quaiato @vquaiato http://viniciusquaiato.com Por que testar? • Saber que algo funciona
  • 19.
    Globalcode – open4education9Vinicius Quaiato @vquaiato http://viniciusquaiato.com Por que testar? • Saber que algo terminou, ficou pronto
  • 20.
    Globalcode – open4education0Vinicius Quaiato @vquaiato http://viniciusquaiato.com Como testamos hoje?
  • 21.
    Globalcode – open4education1Vinicius Quaiato @vquaiato http://viniciusquaiato.com Ctrl + Shift + B
  • 22.
    Globalcode – open4education2Vinicius Quaiato @vquaiato http://viniciusquaiato.com Ctrl + Shift + B • Compilar NÃO é testar! • Apenas significa que o código atende ao compilador, apenas isso!
  • 23.
    Globalcode – open4education3Vinicius Quaiato @vquaiato http://viniciusquaiato.com F5
  • 24.
    Globalcode – open4education4Vinicius Quaiato @vquaiato http://viniciusquaiato.com F5 • Executar a aplicação demora • No geral testa-se apenas o que você pensa que alterou O bater de asas de uma borboleta em Tóquio pode provocar um furacão em Nova Iorque “ ”
  • 25.
    Globalcode – open4education5Vinicius Quaiato @vquaiato http://viniciusquaiato.com Monkey
  • 26.
    Globalcode – open4education6Vinicius Quaiato @vquaiato http://viniciusquaiato.com Monkey • Executar a aplicação demora • É bom para encontrar alguns bugs • Testes não são apenas sobre bugs!
  • 27.
    Globalcode – open4education7Vinicius Quaiato @vquaiato http://viniciusquaiato.com Testers
  • 28.
    Globalcode – open4education8Vinicius Quaiato @vquaiato http://viniciusquaiato.com Testers • São importantes! • Executar a aplicação demora! • Feedback demora! • Bom para encontrar bugs • Código construído sobre bug gera mais bugs!
  • 29.
    Globalcode – open4education9Vinicius Quaiato @vquaiato http://viniciusquaiato.com O que são testes? • Maneira verificável de garantir que o software atende às necessidades de negócio e que funciona como esperado. • Temos isso?
  • 30.
    Globalcode – open4education0Vinicius Quaiato @vquaiato http://viniciusquaiato.com Por que não testar?
  • 31.
    Globalcode – open4education1Vinicius Quaiato @vquaiato http://viniciusquaiato.com Por que não testar? • Demora
  • 32.
    Globalcode – open4education2Vinicius Quaiato @vquaiato http://viniciusquaiato.com Por que não testar? • Eu sou senior!
  • 33.
    Globalcode – open4education3Vinicius Quaiato @vquaiato http://viniciusquaiato.com Por que não testar? • Estamos sem tempo
  • 34.
    Globalcode – open4education4Vinicius Quaiato @vquaiato http://viniciusquaiato.com Bad news... Mentir !
  • 35.
    Globalcode – open4education5Vinicius Quaiato @vquaiato http://viniciusquaiato.com Por que não testar? • Acredite: você não é bom o bastante! • Testar pode consumir algum tempo, mas é necessário! • Deixar de testar não te faz mais rápido, dá apenas uma falsa sensação de velocidade.
  • 36.
    Globalcode – open4education6Vinicius Quaiato @vquaiato http://viniciusquaiato.com É uma cilada Bino!
  • 37.
    Globalcode – open4education7Vinicius Quaiato @vquaiato http://viniciusquaiato.com Vamos aproveitar a vida!
  • 38.
    Globalcode – open4education8Vinicius Quaiato @vquaiato http://viniciusquaiato.com Unit Tests • Testes unitários • Pedaço de código • Executa outro pedaço de código • Verifica se tudo está correto
  • 39.
    Globalcode – open4education9Vinicius Quaiato @vquaiato http://viniciusquaiato.com Unit Tests • Escritos pelo desenvolvedor • Rápidos de excutar • Testam uma única unidade de código
  • 40.
    Globalcode – open4education0Vinicius Quaiato @vquaiato http://viniciusquaiato.com Unit Tests • Testes de unidade! – Unidade é um método ou função, uma operação • SUT – System Under Test • Class • Method • Code
  • 41.
    Globalcode – open4education1Vinicius Quaiato @vquaiato http://viniciusquaiato.com Unit Tests • Executam de forma automatizada • São repetíveis • Qualquer um pode executar • One click execution!
  • 42.
    Globalcode – open4education2Vinicius Quaiato @vquaiato http://viniciusquaiato.com Unit Tests • Provém feedback quase instantâneo • Auxiliam o design da funcionalidade – Escrever testes tem de ser fácil – Está difícil? Refatore! • Ajudam a realizar alterações • Ajudam com regressões – Algo que funcionava e não funciona mais
  • 43.
    Globalcode – open4education3Vinicius Quaiato @vquaiato http://viniciusquaiato.com Unit Tests • E as desvantagens...
  • 44.
    Globalcode – open4education4Vinicius Quaiato @vquaiato http://viniciusquaiato.com Demo • Nosso primeiro Unit Test
  • 45.
    Globalcode – open4education5Vinicius Quaiato @vquaiato http://viniciusquaiato.com MSTest • Framework de Testes da Microsoft • Fornece ferramentas necessárias para Unit Testing • Ferramenta Command Line para executar Unit Tests
  • 46.
    Globalcode – open4education6Vinicius Quaiato @vquaiato http://viniciusquaiato.com MSTest • Atributos para criação de testes – [TestClass] – [TestMethod] • Métodos para asserção dos testes – Assert methods • Rodador de testes integrado com Visual Studio
  • 47.
    Globalcode – open4education7Vinicius Quaiato @vquaiato http://viniciusquaiato.com Demo • Conhecendo os atributos e métodos de Assert
  • 48.
    Globalcode – open4education8Vinicius Quaiato @vquaiato http://viniciusquaiato.com Framework e Runner • O teste é diferente de quem executa o teste
  • 49.
    Globalcode – open4education9Vinicius Quaiato @vquaiato http://viniciusquaiato.com Framework e Runner • Framework é um conjunto de bibliotecas • Contém métodos de assert, atributos, helpers, define estrutura dos testes • MSTest, NUnit, MbUnit, etc.
  • 50.
    Globalcode – open4education0Vinicius Quaiato @vquaiato http://viniciusquaiato.com Framework e Runner • Runner, ou rodador, é quem de fato executa os testes • Um runner pode executar testes de vários frameworks • Pode ser integrado a IDE, ser um command line ou um .exe
  • 51.
    Globalcode – open4education1Vinicius Quaiato @vquaiato http://viniciusquaiato.com Demo • Diferença entre framework e runner
  • 52.
    Globalcode – open4education2Vinicius Quaiato @vquaiato http://viniciusquaiato.com Anatomia AAA • Testes no geral são curtos • Basicamente seguem o padrão AAA • Arrange • Act • Assert
  • 53.
    Globalcode – open4education3Vinicius Quaiato @vquaiato http://viniciusquaiato.com Anatomia AAA • Arrange – Você prepara o ambiente para o teste – Configura variáveis, objetos, monta relações – Prepara tudo que for necessário para que o teste execute
  • 54.
    Globalcode – open4education4Vinicius Quaiato @vquaiato http://viniciusquaiato.com Sobre o Arrange • Em algumas situações o Arrange pode ser reaproveitado – [Setup] – [TestInitialize] – [FixtureSetup] • O Arrange pode ser extenso
  • 55.
    Globalcode – open4education5Vinicius Quaiato @vquaiato http://viniciusquaiato.com Arrange extenso
  • 56.
    Globalcode – open4education6Vinicius Quaiato @vquaiato http://viniciusquaiato.com Anatomia AAA • Act – É a execução do SUT – É a chamada para o método que está sendo testado – É a execução da operação a ser testada
  • 57.
    Globalcode – open4education7Vinicius Quaiato @vquaiato http://viniciusquaiato.com Sobre o Act • Um teste deve atuar independente dos outros • Um Act com muitos métodos é sinal de problema
  • 58.
    Globalcode – open4education8Vinicius Quaiato @vquaiato http://viniciusquaiato.com Anatomia AAA • Assert – É a verificação do resultado – Neste ponto faz-se a análise do resultado do Act com o que era esperado
  • 59.
    Globalcode – open4education9Vinicius Quaiato @vquaiato http://viniciusquaiato.com Sobre o Assert • Um teste no geral tem apenas um Assert • Mais de um Assert no teste mascara erros
  • 60.
    Globalcode – open4education0Vinicius Quaiato @vquaiato http://viniciusquaiato.com Demo • Conhecendo a anatomia AAA de um teste • setup e teardown
  • 61.
    Globalcode – open4education1Vinicius Quaiato @vquaiato http://viniciusquaiato.com NUnit • Framework de unit testing • Portado do JUnit • Hoje é 100% escrito em C# • Um dos frameworks mais utilizados
  • 62.
    Globalcode – open4education2Vinicius Quaiato @vquaiato http://viniciusquaiato.com NUnit • Interfaces fluentes • Asserções mais legíveis • Mais opções de asserções
  • 63.
    Globalcode – open4education3Vinicius Quaiato @vquaiato http://viniciusquaiato.com Demo • Conhecendo o NUnit
  • 64.
    Globalcode – open4education4Vinicius Quaiato @vquaiato http://viniciusquaiato.com Exceptions • E quando queremos uma exception? • Exceptions podem ser regras de negócio • Geralmente uma exception falha o teste • Precisamos deixar claro que queremos isto ou não
  • 65.
    Globalcode – open4education5Vinicius Quaiato @vquaiato http://viniciusquaiato.com Demos • Exceptions no MSTest • Exceptions no NUnit
  • 66.
    Globalcode – open4education6Vinicius Quaiato @vquaiato http://viniciusquaiato.com TDD • Test Driven Development
  • 67.
    Globalcode – open4education7Vinicius Quaiato @vquaiato http://viniciusquaiato.com Não é (só)sobre testes
  • 68.
    Globalcode – open4education8Vinicius Quaiato @vquaiato http://viniciusquaiato.com TDD • Basicamente segue o mantra: – Red, green, refactor • Escreva um teste que falhe • Faça o teste passar • Refatore/melhor o código
  • 69.
    Globalcode – open4education9Vinicius Quaiato @vquaiato http://viniciusquaiato.com TDD • Escrever os testes antes do código de produção • Escrever código que o teste pediu • Resultados: – Testes – Melhor design • Menos acoplamento (acoplamento estável) • Classes e métodos coesos • Clareza no código
  • 70.
    Globalcode – open4education0Vinicius Quaiato @vquaiato http://viniciusquaiato.com TDD • Por que teste antes? – O teste é o primeiro cliente do seu código – Faça como você gostaria que fosse – Ficou difícil? Talvez seja melhor pensar mais
  • 71.
    Globalcode – open4education1Vinicius Quaiato @vquaiato http://viniciusquaiato.com TDD
  • 72.
    Globalcode – open4education2Vinicius Quaiato @vquaiato http://viniciusquaiato.com TDD • Vicia!
  • 73.
    Globalcode – open4education3Vinicius Quaiato @vquaiato http://viniciusquaiato.com Demo • Praticando um pouco de TDD
  • 74.
    Globalcode – open4education4Vinicius Quaiato @vquaiato http://viniciusquaiato.com Stubs e Mocks • Servem para gerenciarmos dependências nos testes • Ambos são objetos fake, “imitam” objetos reais • São muito parecidos, mas têm propósitos distintos
  • 75.
    Globalcode – open4education5Vinicius Quaiato @vquaiato http://viniciusquaiato.com Stubs • Substitui de forma controlável uma dependência externa • Mantém o teste em nossas mãos – Repetível – Rápido – Isolado • Um Stub não fará o teste falhar • Asserts não são feitos contra os Stubs • Fornecem algum estado para o SUT
  • 76.
    Globalcode – open4education6Vinicius Quaiato @vquaiato http://viniciusquaiato.com Demo • Conhecendo um Stub
  • 77.
    Globalcode – open4education7Vinicius Quaiato @vquaiato http://viniciusquaiato.com Mocks • É um objeto que reage às interações com o SUT • Tem poder para falhar o teste • Assert é realizado contra o mock • Um mock por teste – SRP até no teste!
  • 78.
    Globalcode – open4education8Vinicius Quaiato @vquaiato http://viniciusquaiato.com Demo • Conhecendo um Mock
  • 79.
    Globalcode – open4education9Vinicius Quaiato @vquaiato http://viniciusquaiato.com Stubs e Mocks • Indispensáveis • Sem eles testar é doloroso e custoso • Criá-los na mão é doloroso e custoso • Gera muito retrabalho • Gasta-se muito tempo • Testar fica chato!
  • 80.
    Globalcode – open4education0Vinicius Quaiato @vquaiato http://viniciusquaiato.com Frameworks de Mock • Frameworks de isolamento • Criam Mocks e Stubs de forma simples • Não há retrabalho • Lidam com vários tipos de configuração, sem causar dores
  • 81.
    Globalcode – open4education1Vinicius Quaiato @vquaiato http://viniciusquaiato.com Frameworks de isolamento • Moq • Rhino Mocks • TypeMock/Isolator 2010 • JustMock
  • 82.
    Globalcode – open4education2Vinicius Quaiato @vquaiato http://viniciusquaiato.com Moq • Fala-se: Mock you! • API bastante simples • Usa .NET 3.5 – Lambdas e Linq • Cria Stubs e Mocks
  • 83.
    Globalcode – open4education3Vinicius Quaiato @vquaiato http://viniciusquaiato.com Demo • Utilizando Moq com Stubs e Mocks
  • 84.
    Globalcode – open4education4Vinicius Quaiato @vquaiato http://viniciusquaiato.com Links • http://msdn.microsoft.com/en-us/library/ms182489%28VS.80%29.aspx • http://code.google.com/p/moq/ • http://www.nunit.org/ • http://www.ayende.com/projects/rhino-mocks.aspx • http://www.testdriven.net/ • http://martinfowler.com/articles/mocksArentStubs.html • http://vimeo.com/user3553347/videos • http://viniciusquaiato.com/blog/category/tdd/ • http://www.aniche.com.br/
  • 85.
    Globalcode – open4education5Vinicius Quaiato @vquaiato http://viniciusquaiato.com Books • The Art of Unit Testing • Test Driven Development by example • Growing Object-Oriented Software Guided by Tests
  • 86.
    Globalcode – open4education6Vinicius Quaiato @vquaiato http://viniciusquaiato.com Contact: me • http://viniciusquaiato.com • vinicius.quaiato@gmail.com – msn e gtalk • @vquaiato
  • 87.
    Globalcode – open4education7Vinicius Quaiato @vquaiato http://viniciusquaiato.com So... • Thank you!