Outro encontro utilizando o BDD, metodologia de desenvolvimento que tem causado interessantes discussões no dojo, alguns estão gostando do BDD e outros preferem o TDD.
Kata
O desafio foi fazer um detector de Jogadas de Pocker, consiste em informar um conjunto de 5 cartas para o detector que deverá identificar a maior jogada possível com aquele conjunto e retornar o nome da jogada.
O kata foi retirado do post Relato de um super Dojo Rio, do blog do Dojo Rio.
Código Fonte: https://gist.github.com/742078
features/poker.feature
# language: pt Funcionalidade: Detectar jogada de Poker Para jogar poker E com um baralho com um naipe apenas Como um jogador Eu quero ver as possíveis combinações Cenario: Royal flush Dado que estou jogando Quando eu tenho as cartas "dez", "valete", "dama", "reis" e "as" Entao eu tenho um "royal flush" Cenario: Straight flush Dado que estou jogando Quando eu tenho as cartas "quatro", "cinco", "seis", "sete" e "oito" Entao eu tenho um "straight flush" Cenario: flush Dado que estou jogando Quando eu tenho as cartas "as", "dama", "seis", "valete" e "dois" Entao eu tenho um "flush" Cenario: Royal flush fora de ordem Dado que estou jogando Quando eu tenho as cartas "valete", "dama", "dez", "reis" e "as" Entao eu tenho um "royal flush"
step_definitions/poker_steps.rb
# encoding: uft-8 # step_definitions/poker_steps.rb Dado /^que estou jogando$/ do @game = Game.new end Quando /^eu tenho as cartas "([^\"]*)", "([^\"]*)", "([^\"]*)", "([^\"]*)" e "([^\"]*)"$/ do |arg1, arg2, arg3, arg4, arg5| @game.cards(arg1, arg2, arg3, arg4, arg5) end Entao /^eu tenho um "([^\"]*)"$/ do |arg1| @game.jogadas_possiveis.should == arg1 end
game.rb
# lib/game.rb class Game def initialize() @royal_flush = %w(dez valete dama reis as) @straight_flush = %w(quatro cinco seis sete oito) end def cards(*card) @card = card end def jogadas_possiveis if @card.sort == @straight_flush.sort "straight flush" elsif @card.sort == @royal_flush.sort "royal flush" else "flush" end end end
env.rb
# features/support/env.rb $:.unshift(File.dirname(__FILE__) + '/../../lib') require 'game'
Retrospectiva
O que foi bom ou o que devemos continuar fazendo?
* todos participaram
* kata legal e compreensível
* textamate foi legal
* todos estão tendo o contato com o Mac OS X
* cucumber
* o código ruby ficou legal
* uso de features do ruby
* salomão elogiando o terminal
* projetor
O que foi ruim ou o que devemos fazer de outra maneira ?
* cucumber
* falta de teste unitário
* não utilizando o cucumber para testar o estado
* falta de atenção da platéia
* os pilotos não falarem em voz alta o que estavam fazendo
* menos inibição quando estiver pilotando
* receio de fatorar o cenários de testes (cucumber)
Para os próximos encontros:
* tempo de duração do kata de 2 horas, a contar a partir da escolha do kata, talvez com intervalo de 15 minutos com lanche
* tirar foto do coffee break
Organizadores
O encontro desta semana foi organizado por Patricia Carvalho & Marco Moura
Imagens do encontro