Behaviour Driven Development e Ruby

Posted on February 16, 2009

0


No último Caelum Dojo a linguagem de programação usada foi Ruby. Para os testes
RSpecs e Cucumber foram utilizados, sempre TDD/BDD.

Pra iniciar o projeto foi usado New Gem Generator => newgem

pra instalar basta rodar
$ sudo gem install newgem

E criar o projeto com RSpecs:
$ newgem projeto -T rspec

Um exemplo de teste com RSpecs, o mesmo do site. Primeiro crie a classe que diz o que
seu código deve fazer:

# bowling_spec.rb
require 'bowling'
describe Bowling do
before(:each) do
@bowling = Bowling.new
end
it "should score 0 for gutter game" do
20.times { @bowling.hit(0) }
@bowling.score.should == 0
end
end

Agora você pode rodar o teste com
$spec bowling_spec.rb
ou utilizando a opção AUTOSPEC=TRUE do RSpecs.

Como ainda não temos o código o rspec te devolve um erro uninitialized constant Bowling.
Vamos criar então a classe Bowling

# bowling.rb
class Bowling
def hit(pins)
end
def score
0
end
end

Agora podemos rodar o teste de novo com:
$ spec bowling_spec.rb --format specdoc

Bowling
– should score 0 for gutter game

Finished in 0.007534 seconds

1 example, 0 failures

Cucumber
Cucumber, outro framework de testes utilizados, permite que você escreva
seus testes de forma muito mais próxima da ubiquitous language do Domain-Driven-Design.
Cucumber foca os testes em Behaviour Driven Development, pode ser integrado a testes com Selenium
e exige um pouco de conhecimento de regexp (da pra usar sem, mas com um pouco de duplicação de código).

Alguns exemplos retirados também do próprio site do Cucumber, primeiro um “step”:
Feature: Addition
In order to avoid silly mistakes
As a math idiot
I want to be told the sum of two numbers

Scenario: Add two numbers
Given I have entered 50 into the calculator
And I have entered 70 into the calculator
When I press add
Then the result should be 120 on the screen

seguido de uma “feature”:
Given /I have entered (.*) into the calculator/ do |n|
calculator = Calculator.new
calculator.push(n.to_i)
end

Existe um bundle para textmate no github:
http://github.com/bmabey/cucumber-tmbundle/tree/master

Pra finalizar, está pra sair um livro apenas voltado a testes com RSpecs, Cucumber e outros framewors:
http://www.pragprog.com/titles/achbd/the-rspec-book

Posted in: bdd, cucumber, rspecs, ruby, tdd