Behaviour Driven Development e Ruby

16 February 2009

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
comments powered by Disqus