Upload
internet
View
117
Download
2
Tags:
Embed Size (px)
Citation preview
BDD com RSpecBehaviour-Driven Development em Ruby
Danilo SatoThoughtWorks UKwww.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 RSpecBehaviour-Driven Development em Ruby
Danilo SatoThoughtWorks UKwww.dtsato.com