BDD com RSpec
description
Transcript of BDD com RSpec
![Page 1: BDD com RSpec](https://reader035.fdocuments.in/reader035/viewer/2022062301/56814ac7550346895db7da9c/html5/thumbnails/1.jpg)
BDD com RSpecBehaviour-Driven Development em Ruby
Danilo SatoThoughtWorks UKwww.dtsato.com
![Page 2: BDD com RSpec](https://reader035.fdocuments.in/reader035/viewer/2022062301/56814ac7550346895db7da9c/html5/thumbnails/2.jpg)
Duas Perspectivas
![Page 3: BDD com RSpec](https://reader035.fdocuments.in/reader035/viewer/2022062301/56814ac7550346895db7da9c/html5/thumbnails/3.jpg)
TDD / Test::Unit
![Page 4: BDD com RSpec](https://reader035.fdocuments.in/reader035/viewer/2022062301/56814ac7550346895db7da9c/html5/thumbnails/4.jpg)
DSL para BDD
Quanta sigla…
![Page 5: BDD com RSpec](https://reader035.fdocuments.in/reader035/viewer/2022062301/56814ac7550346895db7da9c/html5/thumbnails/5.jpg)
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)– …
![Page 6: BDD com RSpec](https://reader035.fdocuments.in/reader035/viewer/2022062301/56814ac7550346895db7da9c/html5/thumbnails/6.jpg)
![Page 7: BDD com RSpec](https://reader035.fdocuments.in/reader035/viewer/2022062301/56814ac7550346895db7da9c/html5/thumbnails/7.jpg)
![Page 8: BDD com RSpec](https://reader035.fdocuments.in/reader035/viewer/2022062301/56814ac7550346895db7da9c/html5/thumbnails/8.jpg)
![Page 9: BDD com RSpec](https://reader035.fdocuments.in/reader035/viewer/2022062301/56814ac7550346895db7da9c/html5/thumbnails/9.jpg)
http://rspec.info/documentation/test_unit.html
![Page 10: BDD com RSpec](https://reader035.fdocuments.in/reader035/viewer/2022062301/56814ac7550346895db7da9c/html5/thumbnails/10.jpg)
setup/teardown
![Page 11: BDD com RSpec](https://reader035.fdocuments.in/reader035/viewer/2022062301/56814ac7550346895db7da9c/html5/thumbnails/11.jpg)
Simple Custom Matcher
![Page 12: BDD com RSpec](https://reader035.fdocuments.in/reader035/viewer/2022062301/56814ac7550346895db7da9c/html5/thumbnails/12.jpg)
Custom Matcher
![Page 13: BDD com RSpec](https://reader035.fdocuments.in/reader035/viewer/2022062301/56814ac7550346895db7da9c/html5/thumbnails/13.jpg)
Custom Matcher
![Page 14: BDD com RSpec](https://reader035.fdocuments.in/reader035/viewer/2022062301/56814ac7550346895db7da9c/html5/thumbnails/14.jpg)
Reaproveitamento
![Page 15: BDD com RSpec](https://reader035.fdocuments.in/reader035/viewer/2022062301/56814ac7550346895db7da9c/html5/thumbnails/15.jpg)
Pendente…
![Page 16: BDD com RSpec](https://reader035.fdocuments.in/reader035/viewer/2022062301/56814ac7550346895db7da9c/html5/thumbnails/16.jpg)
Test-Driven Development
![Page 17: BDD com RSpec](https://reader035.fdocuments.in/reader035/viewer/2022062301/56814ac7550346895db7da9c/html5/thumbnails/17.jpg)
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
![Page 18: BDD com RSpec](https://reader035.fdocuments.in/reader035/viewer/2022062301/56814ac7550346895db7da9c/html5/thumbnails/18.jpg)
Testes Unitários• Integridade Interna• Rápidos• Independentes• Escrito por e para desenvolvedores• Não indicam integridade externa
![Page 19: BDD com RSpec](https://reader035.fdocuments.in/reader035/viewer/2022062301/56814ac7550346895db7da9c/html5/thumbnails/19.jpg)
Visão mais ampla
![Page 20: BDD com RSpec](https://reader035.fdocuments.in/reader035/viewer/2022062301/56814ac7550346895db7da9c/html5/thumbnails/20.jpg)
Histórias• Como <papel/usuário>• Eu gostaria de <funcionalidade>• Pois <valor de negócio>
![Page 21: BDD com RSpec](https://reader035.fdocuments.in/reader035/viewer/2022062301/56814ac7550346895db7da9c/html5/thumbnails/21.jpg)
Cenários (exemplos)• Dado <contexto>• Quando <evento>• Então <consequência>
![Page 22: BDD com RSpec](https://reader035.fdocuments.in/reader035/viewer/2022062301/56814ac7550346895db7da9c/html5/thumbnails/22.jpg)
SMART• Specific• Measurable• Achievable• Relevant• Time-boxed
![Page 23: BDD com RSpec](https://reader035.fdocuments.in/reader035/viewer/2022062301/56814ac7550346895db7da9c/html5/thumbnails/23.jpg)
![Page 24: BDD com RSpec](https://reader035.fdocuments.in/reader035/viewer/2022062301/56814ac7550346895db7da9c/html5/thumbnails/24.jpg)
![Page 25: BDD com RSpec](https://reader035.fdocuments.in/reader035/viewer/2022062301/56814ac7550346895db7da9c/html5/thumbnails/25.jpg)
Testes de Aceitação• Integridade Externa• Mais lentos• Mais difícil detectar causa de erros• Escrito para clientes• Não indicam integridade interna
![Page 26: BDD com RSpec](https://reader035.fdocuments.in/reader035/viewer/2022062301/56814ac7550346895db7da9c/html5/thumbnails/26.jpg)
![Page 27: BDD com RSpec](https://reader035.fdocuments.in/reader035/viewer/2022062301/56814ac7550346895db7da9c/html5/thumbnails/27.jpg)
![Page 28: BDD com RSpec](https://reader035.fdocuments.in/reader035/viewer/2022062301/56814ac7550346895db7da9c/html5/thumbnails/28.jpg)
Testes Unitários
![Page 29: BDD com RSpec](https://reader035.fdocuments.in/reader035/viewer/2022062301/56814ac7550346895db7da9c/html5/thumbnails/29.jpg)
Testes de Aceitação
![Page 30: BDD com RSpec](https://reader035.fdocuments.in/reader035/viewer/2022062301/56814ac7550346895db7da9c/html5/thumbnails/30.jpg)
![Page 31: BDD com RSpec](https://reader035.fdocuments.in/reader035/viewer/2022062301/56814ac7550346895db7da9c/html5/thumbnails/31.jpg)
![Page 32: BDD com RSpec](https://reader035.fdocuments.in/reader035/viewer/2022062301/56814ac7550346895db7da9c/html5/thumbnails/32.jpg)
?
![Page 33: BDD com RSpec](https://reader035.fdocuments.in/reader035/viewer/2022062301/56814ac7550346895db7da9c/html5/thumbnails/33.jpg)
Integração
![Page 34: BDD com RSpec](https://reader035.fdocuments.in/reader035/viewer/2022062301/56814ac7550346895db7da9c/html5/thumbnails/34.jpg)
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)– …
![Page 35: BDD com RSpec](https://reader035.fdocuments.in/reader035/viewer/2022062301/56814ac7550346895db7da9c/html5/thumbnails/35.jpg)
Mocks
![Page 36: BDD com RSpec](https://reader035.fdocuments.in/reader035/viewer/2022062301/56814ac7550346895db7da9c/html5/thumbnails/36.jpg)
Criando um mock
![Page 37: BDD com RSpec](https://reader035.fdocuments.in/reader035/viewer/2022062301/56814ac7550346895db7da9c/html5/thumbnails/37.jpg)
Gravando Expectativas
![Page 38: BDD com RSpec](https://reader035.fdocuments.in/reader035/viewer/2022062301/56814ac7550346895db7da9c/html5/thumbnails/38.jpg)
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– …
![Page 39: BDD com RSpec](https://reader035.fdocuments.in/reader035/viewer/2022062301/56814ac7550346895db7da9c/html5/thumbnails/39.jpg)
Stubs• Mocks que não verificam expectativas• Servem como dublês mas não se importam
com o que aconteceu
![Page 40: BDD com RSpec](https://reader035.fdocuments.in/reader035/viewer/2022062301/56814ac7550346895db7da9c/html5/thumbnails/40.jpg)
RSpec on Rails• Permite testar camadas isoladas:– Model– Controller– View– Helper
• Testes de aceitação com Histórias
![Page 41: BDD com RSpec](https://reader035.fdocuments.in/reader035/viewer/2022062301/56814ac7550346895db7da9c/html5/thumbnails/41.jpg)
Model
![Page 42: BDD com RSpec](https://reader035.fdocuments.in/reader035/viewer/2022062301/56814ac7550346895db7da9c/html5/thumbnails/42.jpg)
Controller
![Page 43: BDD com RSpec](https://reader035.fdocuments.in/reader035/viewer/2022062301/56814ac7550346895db7da9c/html5/thumbnails/43.jpg)
View
![Page 44: BDD com RSpec](https://reader035.fdocuments.in/reader035/viewer/2022062301/56814ac7550346895db7da9c/html5/thumbnails/44.jpg)
Muito mais…
http://rspec.info
![Page 45: BDD com RSpec](https://reader035.fdocuments.in/reader035/viewer/2022062301/56814ac7550346895db7da9c/html5/thumbnails/45.jpg)
De volta ao BDD…
![Page 46: BDD com RSpec](https://reader035.fdocuments.in/reader035/viewer/2022062301/56814ac7550346895db7da9c/html5/thumbnails/46.jpg)
Normalmente…
![Page 47: BDD com RSpec](https://reader035.fdocuments.in/reader035/viewer/2022062301/56814ac7550346895db7da9c/html5/thumbnails/47.jpg)
BDD
![Page 48: BDD com RSpec](https://reader035.fdocuments.in/reader035/viewer/2022062301/56814ac7550346895db7da9c/html5/thumbnails/48.jpg)
BDD
![Page 49: BDD com RSpec](https://reader035.fdocuments.in/reader035/viewer/2022062301/56814ac7550346895db7da9c/html5/thumbnails/49.jpg)
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
![Page 50: BDD com RSpec](https://reader035.fdocuments.in/reader035/viewer/2022062301/56814ac7550346895db7da9c/html5/thumbnails/50.jpg)
Coisas legais (Ruby)• Autotest• Synthesis• Webrat• Cucumber• Selenium
![Page 51: BDD com RSpec](https://reader035.fdocuments.in/reader035/viewer/2022062301/56814ac7550346895db7da9c/html5/thumbnails/51.jpg)
BDD com RSpecBehaviour-Driven Development em Ruby
Danilo SatoThoughtWorks UKwww.dtsato.com