Barauna Hugo - Cucumber e RSpec стр 7.

Шрифт
Фон

a mensagem inicial do jogo, que está salva na variável text.

Especificações de cucumber devem testar o sistema utilizando a mesma interface

que o usuário utilizaria. O nosso jogo será um jogo de console, mas por enquanto

vamos manter o teste bem simples nesse hello world, sem uma interação real do

teste com o console. Iremos fazer esse tipo de teste de modo completo e detalhado a

partir do capítulo 5.

Com os step definitions prontos, vamos rodar o Cucumber novamente:

$ cucumber

(...)

uninitialized constant Game (NameError)

18

Casa do Código

Capítulo 2. Primeiros passos com RSpec e Cucumber

(...)

1 scenario (1 failed)

2 steps (1 failed, 1 skipped)

Perceba que o teste quebrou e que nos deu uma mensagem de erro. A mensagem

de erro do teste é o feedback que devemos usar para o próximo passo de implemen-

tação. Nesse caso a mensagem está dizendo que a classe Game ainda não foi definida.

O correto nesse momento agora seria parar um pouco os testes de Cucumber e

começar um ciclo completo de red - green - refactor com RSpec para a definição da

classe Game, mas não vamos fazer isso agora, para manter o exemplo simples. O

ciclo inteiro de BDD com Cucumber e RSpec será feito extensivamente a partir do

capítulo 5.

Por enquanto, vamos apenas definir a classe

Game dentro do arquivo

features/step_definitions/game_steps.rb mesmo. Adicione a definição

dessa classe no final desse arquivo:

# encoding: UTF-8

Quando /^começo um novo jogo$/ do

@game = Game.new

@game.start

end

Então /^vejo a seguinte mensagem na tela:$/ do |text|

expect(@game.output).to include(text)

end

class Game

end

Ao rodar o Cucumber novamente, vemos uma mensagem de erro diferente:

$ cucumber

(...)

undefined method `start' for #<Game:0x007fde41b5a938> (NoMethodError)

(...)

19

2.2. Olá Cucumber

Casa do Código

Dessa vez o teste quebrou porque o método Game#start não foi definido ainda.

Vamos implementar esse método, que vai salvar dentro do output do jogo a men-

sagem inicial. Adicione esse método à classe Game do seguinte modo:

# encoding: UTF-8

# (...)

class Game

def initialize

@output = []

end

def start

@output << "Bem vindo ao jogo da forca!"

end

end

Ao rodarmos o Cucumber, podemos ver que a mensagem de erro mudou:

$ cucumber

(...)

undefined method òutput' for #<Game:0x007fbcdb268410> (NoMethodError)

(...)

Pela mensagem de erro, podemos ver que falta implementar o método

Game#output, responsável por devolver o conteúdo da variável @output. Para

implementá-lo, basta adicionar um attr_reader :output na classe Game:

# encoding: UTF-8

# (...)

class Game

attr_reader :output

# (...)

end

Ao rodar o Cucumber agora, vemos que agora ele está no verde!

20

Casa do Código

Capítulo 2. Primeiros passos com RSpec e Cucumber

$ cucumber

(...)

1 scenario (1 passed)

2 steps (2 passed)

Figura 2.6: Spec com Cucumber no verde

Pronto, você acabou de escrever sua primeira especificação com Cucumber! A

ideia era mostrar de modo rápido como é a cara do RSpec e do Cucumber, para você

ter uma ideia do que vem pela frente.

Repare que durante os testes, o tempo inteiro nós descrevemos o comportamento

das aplicações. Esse foco no comportamento é um grande diferencial, que quando

bem usado, pode dar uma nova vida aos nossos testes.

2.3

O que é BDD?

O termo BDD (behavior-driven development) foi cunhado por Dan North por volta

de 2003 [11]. Dan North estava tendo dificuldades em ensinar TDD para seus alunos,

pois eles ficavam com dúvidas sobre por onde começar a testar, o que testar, como

nomear seus testes etc.

Ele percebeu que parte do problema em entender TDD era a palavra teste em

si, pois ela confundia o desenvolvedor sobre a real motivação por trás de TDD. A

21

2.3. O que é BDD?

Casa do Código

principal motivação do TDD não é testar o seu software, e sim especificá-lo com

exemplos de como usar o seu código e deixar isso guiar o design do mesmo.

Ao fazer TDD, o desenvolvedor está especificando o comportamento do seu soft-

ware e definindo seu design. A suíte de testes automatizados gerada através do TDD

é apenas uma boa consequência do processo. Baseado nessas ideias, Dan North

sugeriu mudar a palavra de teste para comportamento (behavior). Para concretizar

sua ideia, Dan North escreveu o JBehave, uma biblioteca de BDD em Java.

No mundo de Ruby, a ideia de BDD começou a se concretizar quando Dan North

portou o JBehave para Ruby com o nome de RBehave. Em 2005, inspirado pela

ideia de BDD, Steven Baker escreveu a primeira versão do RSpec. Tempos depois o

RBehave foi integrado ao RSpec com o nome de Story Runner. Finalmente, em 2008,

Aslak Hellesøy reescreveu o Story Runner e o chamou de Cucumber.

Apesar do BDD ter nascido apenas como um modo de rever a nomenclatura do

TDD e o modo como se enxerga essa prática, hoje BDD é mais do que isso, ele agora

é uma abordagem de desenvolvimento de software [3] que propõe que você desen-

volva seu software especificando as várias camadas de comportamento com testes

Ваша оценка очень важна

0
Шрифт
Фон

Помогите Вашим друзьям узнать о библиотеке