bdd com rspec

51
BDD com RSpec Behaviour-Driven Development em Ruby Danilo Sato ThoughtWorks UK www.dtsato.com

Upload: tarmon

Post on 16-Jan-2016

62 views

Category:

Documents


0 download

DESCRIPTION

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) - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: BDD com RSpec

BDD com RSpecBehaviour-Driven Development em Ruby

Danilo SatoThoughtWorks UKwww.dtsato.com

Page 2: BDD com RSpec

Duas Perspectivas

Page 3: BDD com RSpec

TDD / Test::Unit

Page 4: BDD com RSpec

DSL para BDD

Quanta sigla…

Page 5: BDD com RSpec

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
Page 7: BDD com RSpec
Page 8: BDD com RSpec
Page 9: BDD com RSpec

http://rspec.info/documentation/test_unit.html

Page 10: BDD com RSpec

setup/teardown

Page 11: BDD com RSpec

Simple Custom Matcher

Page 12: BDD com RSpec

Custom Matcher

Page 13: BDD com RSpec

Custom Matcher

Page 14: BDD com RSpec

Reaproveitamento

Page 15: BDD com RSpec

Pendente…

Page 16: BDD com RSpec

Test-Driven Development

Page 17: BDD com RSpec

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

Testes Unitários• Integridade Interna• Rápidos• Independentes• Escrito por e para desenvolvedores• Não indicam integridade externa

Page 19: BDD com RSpec

Visão mais ampla

Page 20: BDD com RSpec

Histórias• Como <papel/usuário>• Eu gostaria de <funcionalidade>• Pois <valor de negócio>

Page 21: BDD com RSpec

Cenários (exemplos)• Dado <contexto>• Quando <evento>• Então <consequência>

Page 22: BDD com RSpec

SMART• Specific• Measurable• Achievable• Relevant• Time-boxed

Page 23: BDD com RSpec
Page 24: BDD com RSpec
Page 25: BDD com RSpec

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
Page 27: BDD com RSpec
Page 28: BDD com RSpec

Testes Unitários

Page 29: BDD com RSpec

Testes de Aceitação

Page 30: BDD com RSpec
Page 31: BDD com RSpec
Page 32: BDD com RSpec

?

Page 33: BDD com RSpec

Integração

Page 34: BDD com RSpec

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

Mocks

Page 36: BDD com RSpec

Criando um mock

Page 37: BDD com RSpec

Gravando Expectativas

Page 38: BDD com RSpec

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

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

RSpec on Rails• Permite testar camadas isoladas:– Model– Controller– View– Helper

• Testes de aceitação com Histórias

Page 41: BDD com RSpec

Model

Page 42: BDD com RSpec

Controller

Page 43: BDD com RSpec

View

Page 44: BDD com RSpec

Muito mais…

http://rspec.info

Page 45: BDD com RSpec

De volta ao BDD…

Page 46: BDD com RSpec

Normalmente…

Page 47: BDD com RSpec

BDD

Page 48: BDD com RSpec

BDD

Page 49: BDD com RSpec

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

Coisas legais (Ruby)• Autotest• Synthesis• Webrat• Cucumber• Selenium

Page 51: BDD com RSpec

BDD com RSpecBehaviour-Driven Development em Ruby

Danilo SatoThoughtWorks UKwww.dtsato.com