BDD(ビヘイビア駆動開発)でハノイの塔の実装をしてみる~BDD超入門~
今回はBDD(Behavior Driven Development: ビヘイビア駆動開発)でハノイの塔の実装をします。
- TDDとの違い
- BDDフレームワークのインストール
- スペック(BDDのテストコード)を書く
- スペックの実行
以上の流れで説明します。今回も参考文献は
- 作者: 大場寧子,大場光一郎,五十嵐邦明,櫻井達生
- 出版社/メーカー: 技術評論社
- 発売日: 2012/07/31
- メディア: 単行本(ソフトカバー)
- 購入: 2人 クリック: 71回
- この商品を含むブログ (9件) を見る
で行います。(p205~)
TDDとの違い
TDDの場合 assert という記述で「この時の値は~かどうかを検証する」
という意味をもっています。
一方BDDの場合
「この時の値は~である」
という意味の言葉を返します。
TDDは結果がどうなるかを考えてコーディングするのに対し、
BDDは設定がこうであるからこのようにコーディングする
というようなイメージがあります(個人的にですが)。
TDDはウォーターフォールを逆から検証していくのに対し、
BDDはウォーターフォールをそのまま行く。
みたいなことも感じます。
早速具体例を検証考えます。
スペック(BDDのテストコード)を書く
次のように書きます。
hanoi_spec.rb
1 # -*- coding: utf-8 -*- 2 3 require './hanoi' 4 5 describe Hanoi do 6 describe "#disc" do 7 let(:hanoi) {Hanoi.new} 8 9 context "with 1" do 10 it {hanoi.disc(1).should == 1} 11 end 12 13 context "with 3" do 14 it {hanoi.disc(3).should == 7} 15 end 16 17 context "with 0" do 18 it {expect {hanoi.disc(0)}.to raise_error(RuntimeError)} 19 end 20 end 21 end
順に説明すると、
1行目では前回作成した hanoi.rbを読み込みます
5行目からこのHanoiは何をするかを書いていきます。
Hanoi do (ハノイは~をする)
#disc do (ハノイのメソッドのdiscは~をする)
with 1 (引数が1の時に)
should == 1 (1となる)
with 3 (引数が3の時に)
should == 7 (7となる)
with 0 (引数が0の時に)
raise_error(RuntimeError) (例外エラーとなる)
全て正しく動作されれば上記の様な出力が得られます。
実際に実行してみます。
スペックの実行
スペックの実行はコマンドラインに次のように打ち込みます。
> rspec -f d hanoi_spec.rb
すると結果が次のようになりました。
Hanoi #disc with 1 should == 1 with 3 should == 7 with 0 should raise RuntimeError Finished in 0.02544 seconds 3 examples, 0 failures
というわけで先に示した期待していた文と同じような出力となりました。
以上BDDのコードから実行まで書きました。
しかし個人的にはTDDの方が良いような気もします。
こちらもまだまだ色々やって有用性を検証したいと思います。