bdd com rspec behaviour-driven development em ruby danilo sato thoughtworks uk

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

Upload: internet

Post on 16-Apr-2015

114 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: BDD com RSpec Behaviour-Driven Development em Ruby Danilo Sato ThoughtWorks UK

BDD com RSpecBehaviour-Driven Development em Ruby

Danilo SatoThoughtWorks UKwww.dtsato.com

Page 2: BDD com RSpec Behaviour-Driven Development em Ruby Danilo Sato ThoughtWorks UK

Duas Perspectivas

Page 3: BDD com RSpec Behaviour-Driven Development em Ruby Danilo Sato ThoughtWorks UK

TDD / Test::Unit

Page 4: BDD com RSpec Behaviour-Driven Development em Ruby Danilo Sato ThoughtWorks UK

DSL para BDD

Quanta sigla…

Page 5: BDD com RSpec Behaviour-Driven Development em Ruby Danilo Sato ThoughtWorks UK

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 Behaviour-Driven Development em Ruby Danilo Sato ThoughtWorks UK
Page 7: BDD com RSpec Behaviour-Driven Development em Ruby Danilo Sato ThoughtWorks UK
Page 8: BDD com RSpec Behaviour-Driven Development em Ruby Danilo Sato ThoughtWorks UK
Page 9: BDD com RSpec Behaviour-Driven Development em Ruby Danilo Sato ThoughtWorks UK

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

Page 10: BDD com RSpec Behaviour-Driven Development em Ruby Danilo Sato ThoughtWorks UK

setup/teardown

Page 11: BDD com RSpec Behaviour-Driven Development em Ruby Danilo Sato ThoughtWorks UK

Simple Custom Matcher

Page 12: BDD com RSpec Behaviour-Driven Development em Ruby Danilo Sato ThoughtWorks UK

Custom Matcher

Page 13: BDD com RSpec Behaviour-Driven Development em Ruby Danilo Sato ThoughtWorks UK

Custom Matcher

Page 14: BDD com RSpec Behaviour-Driven Development em Ruby Danilo Sato ThoughtWorks UK

Reaproveitamento

Page 15: BDD com RSpec Behaviour-Driven Development em Ruby Danilo Sato ThoughtWorks UK

Pendente…

Page 16: BDD com RSpec Behaviour-Driven Development em Ruby Danilo Sato ThoughtWorks UK

Test-Driven Development

Page 17: BDD com RSpec Behaviour-Driven Development em Ruby Danilo Sato ThoughtWorks UK

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 Behaviour-Driven Development em Ruby Danilo Sato ThoughtWorks UK

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

Page 19: BDD com RSpec Behaviour-Driven Development em Ruby Danilo Sato ThoughtWorks UK

Visão mais ampla

Page 20: BDD com RSpec Behaviour-Driven Development em Ruby Danilo Sato ThoughtWorks UK

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

Page 21: BDD com RSpec Behaviour-Driven Development em Ruby Danilo Sato ThoughtWorks UK

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

Page 22: BDD com RSpec Behaviour-Driven Development em Ruby Danilo Sato ThoughtWorks UK

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

Page 23: BDD com RSpec Behaviour-Driven Development em Ruby Danilo Sato ThoughtWorks UK
Page 24: BDD com RSpec Behaviour-Driven Development em Ruby Danilo Sato ThoughtWorks UK
Page 25: BDD com RSpec Behaviour-Driven Development em Ruby Danilo Sato ThoughtWorks UK

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 Behaviour-Driven Development em Ruby Danilo Sato ThoughtWorks UK
Page 27: BDD com RSpec Behaviour-Driven Development em Ruby Danilo Sato ThoughtWorks UK
Page 28: BDD com RSpec Behaviour-Driven Development em Ruby Danilo Sato ThoughtWorks UK

Testes Unitários

Page 29: BDD com RSpec Behaviour-Driven Development em Ruby Danilo Sato ThoughtWorks UK

Testes de Aceitação

Page 30: BDD com RSpec Behaviour-Driven Development em Ruby Danilo Sato ThoughtWorks UK
Page 31: BDD com RSpec Behaviour-Driven Development em Ruby Danilo Sato ThoughtWorks UK
Page 32: BDD com RSpec Behaviour-Driven Development em Ruby Danilo Sato ThoughtWorks UK

?

Page 33: BDD com RSpec Behaviour-Driven Development em Ruby Danilo Sato ThoughtWorks UK

Integração

Page 34: BDD com RSpec Behaviour-Driven Development em Ruby Danilo Sato ThoughtWorks UK

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 Behaviour-Driven Development em Ruby Danilo Sato ThoughtWorks UK

Mocks

Page 36: BDD com RSpec Behaviour-Driven Development em Ruby Danilo Sato ThoughtWorks UK

Criando um mock

Page 37: BDD com RSpec Behaviour-Driven Development em Ruby Danilo Sato ThoughtWorks UK

Gravando Expectativas

Page 38: BDD com RSpec Behaviour-Driven Development em Ruby Danilo Sato ThoughtWorks UK

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 Behaviour-Driven Development em Ruby Danilo Sato ThoughtWorks UK

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 Behaviour-Driven Development em Ruby Danilo Sato ThoughtWorks UK

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

• Testes de aceitação com Histórias

Page 41: BDD com RSpec Behaviour-Driven Development em Ruby Danilo Sato ThoughtWorks UK

Model

Page 42: BDD com RSpec Behaviour-Driven Development em Ruby Danilo Sato ThoughtWorks UK

Controller

Page 43: BDD com RSpec Behaviour-Driven Development em Ruby Danilo Sato ThoughtWorks UK

View

Page 44: BDD com RSpec Behaviour-Driven Development em Ruby Danilo Sato ThoughtWorks UK

Muito mais…

http://rspec.info

Page 45: BDD com RSpec Behaviour-Driven Development em Ruby Danilo Sato ThoughtWorks UK

De volta ao BDD…

Page 46: BDD com RSpec Behaviour-Driven Development em Ruby Danilo Sato ThoughtWorks UK

Normalmente…

Page 47: BDD com RSpec Behaviour-Driven Development em Ruby Danilo Sato ThoughtWorks UK

BDD

Page 48: BDD com RSpec Behaviour-Driven Development em Ruby Danilo Sato ThoughtWorks UK

BDD

Page 49: BDD com RSpec Behaviour-Driven Development em Ruby Danilo Sato ThoughtWorks UK

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 Behaviour-Driven Development em Ruby Danilo Sato ThoughtWorks UK

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

Page 51: BDD com RSpec Behaviour-Driven Development em Ruby Danilo Sato ThoughtWorks UK

BDD com RSpecBehaviour-Driven Development em Ruby

Danilo SatoThoughtWorks UKwww.dtsato.com