続・Rails 3.x 時代のテストフレームワーク

2010/05/06

先日の記事Rails 3.x 時代のテストフレームワークで、私は「Railsのテストを取り巻く状況が複雑に拡散しつつある」と書き、デファクトスタンダードがまだ現れていないんじゃないか、ということを示唆しました。

その後、この件について他の人が書いているのを更に読んだり、実際にフレームワークを使ってみたりして、わかったことや考えたことをまとめてみようと思います。

まず、Railsで使用できる代表的な4つのテストフレームワーク Test::Unit, RSpec, Shoulda, Cucumber の基礎知識と相互関係について。

Test::Unit は、Ruby 実行系と一緒にインストールされる標準ライブラリの1つです。20世紀末に提唱されたソフトウェア開発手法エクストリーム・プログラミング(XP)が求めるテスト駆動開発をRubyで実践するために作られました。Java 用の JUnit、.Net Framework 用 の NUnit などと並んで xUnit と総称されるテストフレームワーク群の1つです。

著作権表示によれば Ruby 1.8.x にバンドルされている Test::Unit は 2000 年にリリースされ、2003 年以降は開発が止まっています。Ruby on Rails は Test::Unit を少し拡張しつつ、内部に取り込んでいます。Rails のデフォルトのテストフレームワークです。

Ruby 1.9.1 に Test::Unit の効率的な代替品である minitest が標準ライブラリとしてバンドルされ、Test::Unit は minitest をベースにして書き換えられています。また、改良版の Test::Unit 2.x が 2008 年以降活発に開発されていますが、こちらは Ruby 実行系にバンドルされていません。

RSpec は、テスト駆動開発から派生したビヘイビア駆動開発を実践するために作られた新しいフレームワークです。

2005 年 8 月に最初のプレビュー版(Ver. 0.1.0)が発表されていますが、世間の注目を集めるようになったのは、RSpec 1.0 がリリースされた 2007 年 5 月以降です(参考: Google Trends: rspec)。Rails の開発で本格的に利用され始めるのがいつなのか明確ではありませんが、2008 年 7 月に Rails のドキュメントに RSpec に関する記述が追加されています。この頃までに、Rails コミュニティでの受容がかなり進んだものと思われます。

Shoulda は、ボストンとニューヨークに拠点を持つ技術コンサルティング会社 thoughtbot, inc. が、顧客のために Web アプリケーションを作る際に開発したライブラリをオープンソースプロジェクトとして公開したものです。RSpec が Test::Unit の対抗馬として現れたのに対して、Shoulda は既存のテストフレームワークを拡張する存在です。RSpec は Test::Unit とも RSpec とも共存できます。

しかし、現実には Shoulda は RSpec のライバルです。開発者は次の 4 つの方法のどれかを選ぶことになります。

  1. Test::Unit を単体で使う
  2. Test::Unit に Shoulda を組み合わせる
  3. RSpec を単体で使う
  4. RSpec に Shoulda を組み合わせる

Rails には Test::Unit が組み込まれているので、Shoulda と RSpec のどちらか一方または両方をインストールして利用するのですが、おそらく Shoulda を使う人の多くは RSpec のどこかが気に入らないのです。RSpec と Shoulda を組み合わせるケースは少ないと思われます。

初期の Shoulda の歴史はよく分かりません。2008 年 9 月に発表された Shoulda 2.0 から Gem としてインストールできるようになりました。

Cucumber は「受け入れテスト」のためのフレームワークです。これを利用すると、人間が実際にブラウザで動作チェックを行うのと同じようなやり方で、コンピュータにアプリケーションをテストさせることができます。

Cucumber の起源は RSpec 付属の Story runner というツールですが、現在の Cucumber は RSpec プロジェクトから独立し、Java や .NET でも使える汎用ツールに発展しています。当然ながら、Test::Unit 単体で開発する場合でも、RSpec や Shoulda を組み合わせる場合でも、Cucumber は利用可能です。Cucumber プロジェクトは 2008 年 4 月に始まりました。まだまだ歴史の浅いツールと言えるでしょう。

さて、ここから 4 つのテストフレームワークを具体的に比較していきたいと思いますが、「基礎知識と相互関係」の記述が当初の予定よりも長くなってしまいましたので、稿を改めることにします。