AgileBrazil 2011 Melhorando a Qualidade dos Códigos de Teste Maurício Eduardo Szabo [email_address] @mauricio_szabo http://mauricioszabo.wordpress.com http://github.com/mauricioszabo/AgileBrazil2011
about:me Programador Ruby, Java, Python, Scala, C/C++, etc...
Scrum Master
Test-Addicted
Clean-Code Addicted
Enfim...
Intro Agilidade, mudanças contínuas, requisitos mutantes Garantia de estabilidade – testes
”Dedo duro” - sempre saber o estado de seu sistema
Confiabilidade no código, acabar com o ”medo de mudar”
Requisitos mudam == testes mudam
Intro – Testes se Pagam Testes demoram para ser escritos?
Mudança - Exemplo Parsing de HTML Quero uma lista de todos os homens na página
Para saber se o Ariovaldo está aparecendo na listagem de homens
Minha Abordagem: BDD Testes x Comportamento Deixa eu ver se isso funciona... assert(this, works()); Deixa eu ver se está fazendo isso mesmo... assertThat(this, isDoing(right)); Assert x Should (Assert x Matcher) Big Picture – Small Picture – Smaller Picture – Unit Test
Primeiros Exemplos Situação: elemento está verde?
Mudança de ”Estilo” Situação: salário válido deve calcular IRPF
(Evitar Cometer) Erros Comuns
JAMAIS!!!
Oops... Certos testes não dizem NADA Certos testes dizem DEMAIS
Framework de Testes O que usar, como usar,  por que usar?
Framework de Testes Test/Unit, JBehave, RSpec, ScalaTest, JUnit, Jasminne, JSpec...
Mocks: Mocha, FlexMock, Mockito, JMock, etc...
Escolha corretamente: Um framework de testes: Deve ser extensível
Deve ser flexível Um framework de mocks: Deve refletir a forma como você pensa
Framework de Testes
Codebase Comparação entre código e linhas de teste 1:1 (se possível)
Testes devem crescer junto com seu código Classes auxiliares, métodos, custom matchers, etc Conforme seu projeto vai crescendo, a dificuldade de escrever novos testes deve ficar constante ou diminuir!
Mocks Expectations: antes do teste, o define-se o que esperamos que o mock receba (Mocha, RSpec, FlexMock, JMock) Assertions: depois do teste, vemos o que o mock recebeu (Mockito)
Eu uso... Para Ruby: RSpec, e às vezes, Mocha
Para Scala: ScalaTest com Mockito
Para Java: JUnit (com os Hamcrest matchers) e Mockito
Para JavaScript: Jasminne
Primeiro, resolva o problema Represente! A vida é um teatro!
Não escreva NADA antes de resolver o problema

Mantendo a Qualidade dos Códigos de Teste