510 likes | 666 Views
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)
E N D
BDD com RSpec Behaviour-Driven Development em Ruby Danilo Sato ThoughtWorks UK www.dtsato.com
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) • …
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
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
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) • …
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
Muito mais… http://rspec.info
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