Behavior Driven Development com Ruby on Rails

Preview:

DESCRIPTION

Apresentação feita para o FLISOL Salvador 2012.

Citation preview

BDD com RoRMarco Antonio – FLISOL 2012 – Salvador, BA

Convidados especiais:

• Cucumber

• RSpec

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

A solução

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

Qualidadeatende aos requisitos

Comunicação

Ling

uag

emCliente Desenvolvedor

Comunicação

Histórias

Cliente Desenvolvedor

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.

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

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

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

Qualidadefuncionar como esperado

Test Driven Development

Faça o teste

passar

Refatore

Teste que

falha

Testes de aceitação

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

Wireframes

Behavior Driven Development

Teste unitário

que falha

Aceitação que falha

Faça o teste

passar

Refatore

Escolhendo as armasRuby on Rails, Cucumber, RSpec, Webrat

Mãos à obraConfigurando o ambiente

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.

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

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

O ambiente de testes

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

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

Hora de entender

Adicionando funcionalidade

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

Escreva o pepino

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/

manga.rb

cucumber features/

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!!!

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!

Cucumber ou RSpec?

AMBOS

Obrigado!

Twitter: @marcoafilho

GitHub: github.com/marcoafilho

Email: marcoafilho@gmail.com