The HIRO Says

If you smell what The HIRO is cooking!!!

Ruby 初心者が Cucumberをインストールして動かすところまでやってみた

[:large]
Rails で Scaffold を作れるようになって20日程度の初心者ですが、趣味と実益を兼ねて Cucumber をインストールして、実際にテストを作成するところまでやってみました。


1.課題認識

2013年5月くらいから新しいチームに参加しているのですが、そこでは次のような課題があります。

  • テストを基本手動で行っており、回帰テストの負荷が非常に高い。
    • リリースの度に、メンバーが丸一日徹夜して実施しているとのこと。
  • 一部有志が単体テストを作成しているが、単体テストだとビジネスサイドやマネジメント層が内容を理解できずレビューできない。
    • 社内ルール上、テスト仕様のレビューが必須。
    • 単体テストでは、それが自分たちの求めている内容を満たしているのかの判別がつかないとのこと。
  • プロダクトの性質上、短期間で繰り返しリリースする必要がある。

2.解決策としての「受入テストの自動化」

昔関わったプロジェクトで、「受入テストの自動化」ATDD・BDD、以下「BDD」と略記)のツールを自作・導入し、手動で4人日かかっていたリリース時のテストを1時間に短縮したことがあります。
昨年 Agile2012 に参加して BDD ツールとしての Cucumber の存在を知ったこと、また最近 Ruby を勉強し始めたことから、Cucumber で BDD を試してみることにしました。


3.Cucumber のインストール方法

前提として、以下の物をインストール済です。

Ruby 2.0.0
Rails 3.2.13
RubyGems 2.0.3

インストールは、以下のコマンドで一発です。(webrat も必要とのことであわせてインストール)

gem install cucumber webrat

"cucumber -h" で、おおよその使い方は把握できます。


4.テストケースの作り方

Cucumber では、テストに当たって次の2つのファイルを作成する必要があるとのこと。

  • .feature ファイル:いわゆるユーザ視点での受入条件・テストケースを記述するファイル
    • Feature として、Connextra format で User story を書くと良い感じ。
    • Scenario として、テストシナリオを Given/When/Then として記述する。
  • _steps.rb ファイル:.feature ファイルの Given/When/Then をプログラム的にどう解釈すれば良いのかを記述するファイル。

要は、ユーザ視点でテストケースを書けるよう、_steps.rb で仕様と実装の橋渡しをしているんですね〜


動かす場合はこんな感じ。_steps.rb をパスに追加して実行。

cucumber -r XXX_steps.rb XXX.feature

5.サンプルコード

Test Driven Development: By Example (Addison-Wesley Signature Series (Beck))

Test Driven Development: By Example (Addison-Wesley Signature Series (Beck))

Kent Beck の『Test-Driven Development』に出てくる Money example の Ruby 版を元に、簡単なサンプルを作成してみました。
https://github.com/hageyahhoo/TDD4Ruby/commit/4bb4ad8522ddbd2aee7456902f6ac2df19a19217

詰まったところ

正規表現で取った値を数値として扱うには、to_i を都度呼んであげないといけないのね(そこかよ!)
to_i やらないと、10 * 2 = 1010 になったりして慌てましたw



千里の道も一歩から。


参考にさせていただいたサイト

Cucumber 公式サイト
http://cukes.info/


Cucumberで普通のRubyスクリプトをテストしてみる
http://blog.livedoor.jp/maru_tak/archives/50858037.html