O documento apresenta uma palestra sobre testes na plataforma .NET. Aborda os conceitos de testes de unidade, as vantagens de se testar o código, frameworks como MSTest e NUnit, e a metodologia de desenvolvimento guiada por testes (TDD).
16. 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
17. 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.
18. Globalcode – open4education8 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Por que testar?
• Saber que algo funciona
19. Globalcode – open4education9 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Por que testar?
• Saber que algo terminou, ficou pronto
22. 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!
24. 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
“
”
26. 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!
28. 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!
29. 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?
35. 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.
38. 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
39. Globalcode – open4education9 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Unit Tests
• Escritos pelo desenvolvedor
• Rápidos de excutar
• Testam uma única unidade de código
40. 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
41. 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!
42. 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
43. Globalcode – open4education3 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Unit Tests
• E as desvantagens...
44. Globalcode – open4education4 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Demo
• Nosso primeiro Unit Test
45. 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
46. 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
47. Globalcode – open4education7 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Demo
• Conhecendo os atributos e métodos de Assert
48. Globalcode – open4education8 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Framework e Runner
• O teste é diferente de quem executa o
teste
49. 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.
50. 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
51. Globalcode – open4education1 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Demo
• Diferença entre framework e runner
52. 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
53. 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
54. 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
56. 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
57. 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
58. 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
59. 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
60. Globalcode – open4education0 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Demo
• Conhecendo a anatomia AAA de um teste
• setup e teardown
61. 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
62. Globalcode – open4education2 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
NUnit
• Interfaces fluentes
• Asserções mais legíveis
• Mais opções de asserções
64. 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
65. Globalcode – open4education5 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Demos
• Exceptions no MSTest
• Exceptions no NUnit
66. Globalcode – open4education6 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
TDD
• Test Driven Development
68. 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
69. 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
70. 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
73. Globalcode – open4education3 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Demo
• Praticando um pouco de TDD
74. 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
75. 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
77. 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!
79. 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!
80. 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
85. 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
86. Globalcode – open4education6 Vinicius Quaiato @vquaiato http://viniciusquaiato.com
Contact: me
• http://viniciusquaiato.com
• vinicius.quaiato@gmail.com
– msn e gtalk
• @vquaiato