BDD com RSpec
Behaviour-Driven Development em Ruby
Danilo Sato
ThoughtWorks UK
www.dtsato.com
Duas Perspectivas
TDD / Test::Unit
DSL para BDD
Quanta sigla…
Test::Unit
• Classe estende Test::Unit::TestCase
• Métodos devem começar com “test”
• Assertions:
– assert(bool)
– assert_equal(expected, actual)
– assert_raise(args, blk)
– assert_nil(actual)
–…
http://rspec.info/documentation/test_unit.html
setup/teardown
Simple Custom Matcher
Custom Matcher
Custom Matcher
Reaproveitamento
Pendente…
Test-Driven Development
Feedback
•
•
•
•
•
•
Confiança
Erros são detectados rapidamente
Ajudam a saber quando terminamos
Pensar no design antes de implementar
Evita generalização desnecessária
Regressão automatizada
Testes Unitários
•
•
•
•
•
Integridade Interna
Rápidos
Independentes
Escrito por e para desenvolvedores
Não indicam integridade externa
Visão mais ampla
Histórias
• Como <papel/usuário>
• Eu gostaria de <funcionalidade>
• Pois <valor de negócio>
Cenários (exemplos)
• Dado <contexto>
• Quando <evento>
• Então <consequência>
SMART
•
•
•
•
•
Specific
Measurable
Achievable
Relevant
Time-boxed
Testes de Aceitação
•
•
•
•
•
Integridade Externa
Mais lentos
Mais difícil detectar causa de erros
Escrito para clientes
Não indicam integridade interna
Testes Unitários
Testes de Aceitação
?
Integração
Mocks
•
•
•
•
Permitem especificar interações entre objetos
Trocam o objeto real por um dublê
Verificam que as expectativas foram atendidas
Substituem:
– Objetos “gordos”
– Serviços externos
– Bibliotecas (não quero testar se o gem funciona)
–…
Mocks
Criando um mock
Gravando Expectativas
Verificar Expectativas
• Automático!
• O teste vai falhar se:
– Método esperado não foi chamado
– Método foi chamado com argumentos diferentes
– Método foi chamado mais ou menos vezes
– Método não esperado foi chamado
–…
Stubs
• Mocks que não verificam expectativas
• Servem como dublês mas não se importam
com o que aconteceu
RSpec on Rails
• Permite testar camadas isoladas:
– Model
– Controller
– View
– Helper
• Testes de aceitação com Histórias
Model
Controller
View
Muito mais…
http://rspec.info
De volta ao BDD…
Normalmente…
BDD
BDD
Resumindo
• Behaviour-Driven Development
– Um processo ponta-a-ponta de desenvolvimento
– Independente de ferramenta
– “Outside-in”
• RSpec
– Ferramental completo para BDD ponta-a-ponta
– Histórias -> Mocks -> Specs
Coisas legais (Ruby)
•
•
•
•
•
Autotest
Synthesis
Webrat
Cucumber
Selenium
BDD com RSpec
Behaviour-Driven Development em Ruby
Danilo Sato
ThoughtWorks UK
www.dtsato.com
Download

Merb - Danilo Sato