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

Post on 16-Apr-2015

115 Views

Category:

Documents

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

top related