Behavior Driven Development com Ruby on Rails

36
BDD com RoR Marco Antonio – FLISOL 2012 – Salvador, BA Convidados especiais: Cucumber RSpec

description

Apresentação feita para o FLISOL Salvador 2012.

Transcript of Behavior Driven Development com Ruby on Rails

Page 1: Behavior Driven Development com Ruby on Rails

BDD com RoRMarco Antonio – FLISOL 2012 – Salvador, BA

Convidados especiais:

• Cucumber

• RSpec

Page 2: Behavior Driven Development com Ruby on Rails

Um problema fácil de resolverEles sempre começam assim

Page 3: Behavior Driven Development com Ruby on Rails
Page 4: Behavior Driven Development com Ruby on Rails

A solução

0 Preciso de um gerenciador de coleções:0 Comic books;0 DVDs;0 LEGOs;0 Jogos;

Page 5: Behavior Driven Development com Ruby on Rails

Qualidadeatende aos requisitos

Page 6: Behavior Driven Development com Ruby on Rails

Comunicação

Ling

uag

emCliente Desenvolvedor

Page 7: Behavior Driven Development com Ruby on Rails

Comunicação

Histórias

Cliente Desenvolvedor

Page 8: Behavior Driven Development com Ruby on Rails

História #123

Para conseguir mais informações de uma coleção de revistasComo um usuárioEu deveria ver um relatório das minhas revistas por tipo.

Page 9: Behavior Driven Development com Ruby on Rails

História #123

Para conseguir mais informações de uma coleção de revistasComo um usuárioEu deveria ver um relatório das minhas revistas por tipo.

proposição de valor

Page 10: Behavior Driven Development com Ruby on Rails

História #123

Para conseguir mais informações de uma coleção de revistasComo um usuárioEu deveria ver um relatório das minhas revistas por tipo.

papel

Page 11: Behavior Driven Development com Ruby on Rails

História #123

Para conseguir mais informações de uma coleção de revistasComo um usuárioEu deveria ver um relatório das minhas revistas por tipo.

funcionalidade

Page 12: Behavior Driven Development com Ruby on Rails

Qualidadefuncionar como esperado

Page 13: Behavior Driven Development com Ruby on Rails

Test Driven Development

Faça o teste

passar

Refatore

Teste que

falha

Page 14: Behavior Driven Development com Ruby on Rails

Testes de aceitação

Page 15: Behavior Driven Development com Ruby on Rails

História #123

Apresentar todos os gêneros de revistas com a soma realDeveria mostrar o # total de revistasDeveria possuir o link para nova revistaDeveria possuir o link para todas as revistas

Page 16: Behavior Driven Development com Ruby on Rails

Wireframes

Page 17: Behavior Driven Development com Ruby on Rails

Behavior Driven Development

Teste unitário

que falha

Aceitação que falha

Faça o teste

passar

Refatore

Page 18: Behavior Driven Development com Ruby on Rails

Escolhendo as armasRuby on Rails, Cucumber, RSpec, Webrat

Page 19: Behavior Driven Development com Ruby on Rails
Page 20: Behavior Driven Development com Ruby on Rails

Mãos à obraConfigurando o ambiente

Page 21: Behavior Driven Development com Ruby on Rails

Instalação

0 Rails:

0 RSpec:

0 Cucumber

$ gem install rails

$ gem install rspec

$ gem install cucumber

Lembre-se de ter a última versão do ruby

instalado.

Page 22: Behavior Driven Development com Ruby on Rails

Criando uma nova aplicação

0 Para criar uma nova aplicação Rails é simples:

0 Pronto! Para testar é executar:

0 No navegador acesse http://localhost:3000

$ rails new manga_collection -T

$ cd manga_collection$ rails s

Page 23: Behavior Driven Development com Ruby on Rails

Gerenciando os pacotes

0 Altere o arquivo Gemfile responsável pelos gerenciamento de pacotes com as seguintes linhas:

0 Precisamos instalar as novas dependências:

group :test do gem 'database_cleaner', '0.7.2' gem 'rspec-rails', '2.9.0' gem 'cucumber-rails', '1.3.0' gem 'webrat', '0.7.3'end

$ bundle install

Page 24: Behavior Driven Development com Ruby on Rails

O ambiente de testes

0 Vamos instalar o RSpec e o Cucumber na aplicação

$ rails g rspec:install$ rails g cucumber:install

Page 25: Behavior Driven Development com Ruby on Rails

Hora de entender

Page 26: Behavior Driven Development com Ruby on Rails

Adicionando funcionalidade

Page 27: Behavior Driven Development com Ruby on Rails

Rails scaffold

0 Como exemplo vamos usar a funcionalidade de scaffold para modelar o sistema.

$ rails g scaffold manga name:string volume:integer genre:string

Page 28: Behavior Driven Development com Ruby on Rails

Escreva o pepino

Page 29: Behavior Driven Development com Ruby on Rails

Veja falhar

0 Execute:

0 A princípio ele vai apenas informar que existem passos não definidos;

0 Crie um arquivo .rb em features/step_definitions;0 Implemente os passos e veja os testes falharem;

$ cucumber features/

Page 30: Behavior Driven Development com Ruby on Rails

manga.rb

Page 31: Behavior Driven Development com Ruby on Rails

cucumber features/

Page 32: Behavior Driven Development com Ruby on Rails

Faça o teste passar

0 Implementar um controle para relatórios de mangá;0 Página html.erb com as expectativas no wireframe;0 Rota apontando para a página;

Enough is enough!!!

Page 33: Behavior Driven Development com Ruby on Rails

Refatorar sem medo

0 Princípio: Encontrar code smells0 Exemplos:

0 Variáveis temporárias;0 Longos métodos;0 Longas classes;

0 Os testes servem de suporte para refatoração!

Page 34: Behavior Driven Development com Ruby on Rails

Cucumber ou RSpec?

AMBOS

Page 35: Behavior Driven Development com Ruby on Rails
Page 36: Behavior Driven Development com Ruby on Rails

Obrigado!

Twitter: @marcoafilho

GitHub: github.com/marcoafilho

Email: [email protected]