rspecのマインドセット

| | コメント(2)

こういう説明の仕方はどうだろうか。ワークショップぽくやるときには、箇条書の部分を参加者に考えてもらったり。

仕様なんてのは、だいたい箇条書だったりする。例えば、FIFOなキューの仕様を考えてみよう。

  • キューが空のとき
    • 空だってわかること
    • 長さは0を返すこと
    • 先頭から取り出すそうとするとnilを返すこと
  • キューに何個かはいってるとき
    • 空じゃないってわかること
    • 長さは要素の個数を返すこと
    • 先頭から取り出そうとすると最初につっこんだやつが返ってくること

すんごい適当だが、こんな感じだろうか。んで、これをもとにテストをつくる。Rubyの標準ライブラリにQueueって名前のクラスがあるんで、かぶるのは微妙だから適当にArrayQueue(荒井注)とでも名前をつけとく。

んで、これが素直にテストに繋がってくのが、rspecの良さなんですよ!! きっと。

context 'キューが空のとき' do
  setup do
    @q = ArrayQueue.new
  end
  specify '空だってわかること' do
    @q.should_be_empty
  end
  specify '長さは0を返すこと' do
    @q.size.should_be 0
  end
  specify '先頭から取り出すそうとするとnilを返すこと' do
    @q.deq.should_be_nil
  end
end

context 'キューに何個かはいってるとき' do
  setup do
    @q = ArrayQueue.new
    @q.enq(:one)
    @q.enq(:two)
    @q.enq(:three)
  end
  specify '空じゃないってわかること' do
    @q.should_not_be_empty
  end
  specify '長さは要素の個数を返すこと' do
    @q.size.should_be 3
  end
  specify '先頭から取り出そうとすると最初につっこんだやつが返ってくること' do
    @q.deq.should_eql :one
  end
end

実行するとこんなかんじ

キューが空のとき
- 空だってわかること (ERROR - 1)
- 長さは0を返すこと (ERROR - 2)
- 先頭から取り出すそうとするとnilを返すこと (ERROR - 3)

キューに何個かはいってるとき
- 空じゃないってわかること (ERROR - 4)
- 長さは要素の個数を返すこと (ERROR - 5)
- 先頭から取り出そうとすると最初につっこんだやつが返ってくること (ERROR - 6)

1)
NameError in 'キューが空のとき 空だってわかること'
uninitialized constant ArrayQueue
./tmp.rb:24:

2)
NameError in 'キューが空のとき 長さは0を返すこと'
uninitialized constant ArrayQueue
./tmp.rb:24:

3)
NameError in 'キューが空のとき 先頭から取り出すそうとするとnilを返すこと'
uninitialized constant ArrayQueue
./tmp.rb:24:

4)
NameError in 'キューに何個かはいってるとき 空じゃないってわかること'
uninitialized constant ArrayQueue
./tmp.rb:39:

5)
NameError in 'キューに何個かはいってるとき 長さは要素の個数を返すこと'
uninitialized constant ArrayQueue
./tmp.rb:39:

6)
NameError in 'キューに何個かはいってるとき 先頭から取り出そうとすると最初につっこんだやつが返ってくること'
uninitialized constant ArrayQueue
./tmp.rb:39:

Finished in 0.006 seconds

6 specifications, 6 failures

コメント(2)

荒井注いい。
これから説明するときはそれを使います。

ちなみに
@q.empty?.should_be true
@q.empty?.should_not_be true

@q.should_be_empty
@q.should_not_be_empty

と書くのがだんだん気持ちよくなります。あふ。

takai :

おっす、あとでなおすっす

コメントする

著者について

高井直人
高井 直人
takai@recompile.net

ソフトウェアエンジニア。1977年横浜生まれ。大学在学中からネットワークや情報技術にたずさわる。Web制作会社などを経て、現在はシステムインテグレータに勤務。エンタープライズRubyをテーマに社内標準の策定などに従事している。

タグクラウド

ウェブページ

Powered by Movable Type 4.1-en-release-26-r1141-20080104