テスティングフレームワーク
Test::Unit
- Ruby 1.8 まで主力となっていたユニットテストライブラリである。
- Ruby 1.9 からは後述する minitest/unit によって置き換えられた。Ruby 1.9 で利用したい場合は RubyGems によるインストールが必要とドキュメントに記載がある。
- 各種 assert 文により実行結果を検証し、各種テスト結果(メソッド単位)の成否をレポートしてくれる。
- ruby コマンドで実行する。
minitest/unit
- Ruby 1.9 から Test::Unit を置き換える形で実装されたユニットテストライブラリである。
- Ruby 1.8 で利用する場合は、RubyGems によりインストールすれば利用できる(筆者は Ruby 1.8 と 1.9 の両方をサポートするためそのような利用方法をしている)。
- 各種 assert 文により実行結果を検証し、各種テスト結果(メソッド単位)の成否をレポートしてくれる。
- ruby コマンドで実行する。
RSpec
- テストをより仕様に近づけた記述で書くことを目指しているテストライブラリである。
- RSpec の特徴は Ruby にメソッドを追加した DSL として定義されている点である。
- テストの成否だけではなく、その他、各種出力することにも注力している。
- 様々なテスト関連ライブラリや周辺ツールを統合したり、標準サポートしたりといった試みを積極的に行っている。
- spec コマンドという独自のコマンドで実行する。
- 参考
その他
- Cucumber
- MiniTest::Spec
考察
- なぜテスティングフレームワークがたくさんあるのか?
古典的なテスティングフレームワークの主な需要はテストの自動化でした。
それは満たされ、より高度な需要として、テストコードの読みやすさの追及が行われています。
Ruby は DSL が作りやすい言語と言われています。
DSL によって、テストコードをいかに読み書きしやすくするか、考え方がいくつもあり、それらが方言となってたくさんのテスティングフレームワークが作られているのだと思います。
これら高度な読み書きの需要を満たすフレームワークの多くは、コードを英語表現に近づける試みとして行われています。
- どのテスティングフレームワークを使うか?
一番大事なことは、使うテスティングフレームワークは1つに絞りましょうということです。
少なくとも1つのプロダクト内で複数のテスティングフレームワークを混在させて使うことは避けましょう。混在させてしまうと管理が複雑になります。テストの読み書きはもちろん、実行やレポート出力などなど、大変になります。
これから覚え始めるのであれば、既に Test::Unit は縮退方向なので止めましょう。
xUnit の利用経験があり、勉強の初期コストを抑えて即時にユニットテストを書きたい場合は minitest/unit がおススメだと思います。
これから覚え始めるのであれば RSpec がおススメだと思います。英語に堪能であれば尚更です。周辺ツール(レポート出力等)のサポートも手厚いし、情報も多いと思います。
重要なので繰り返し書きますが、1つのプロダクト内で使うテスティングフレームワークは1つに絞りましょう。 ただし、利用する/しないはともかく他のテスティングフレームワークで作られたテストも読めるようにしておくと良いでしょう。
勉強するタイミングは、Ruby で作られた他のアプリケーションやライブラリのテストを読む必要に迫られたときで良いと思います。
- 個人的にはどうしてるの?
minitest/unit を使ってます。古典的なテスティングフレームワークから入っているからです。
1つのプロダクト内で使うテスティングフレームワークは1つに絞るという信念があるので、既に作っているプロダクトに対して新しく書くテストに新しいテスティングフレームワークを採用するつもりはありません。
もし移行の絶対の必要があれば、たぶん、全てのテストを書き直します。一括変換ツールは作ると思いますが。
レポート出力機能などのサポートが多少薄い気がします。カバレージを出力したいのですが、まだ実現できていません。これは調査不足が原因かもしれませんが、RSpec の情報は簡単に調べられた記憶があります。
モック
mocha
- メインサイト - File: README — Mocha 0.14.0
カバレージ関連
RCov(RCov - Code Coverage for Ruby)
- Ruby 1.8 では使えるが、Ruby 1.9 では使えない。
- gem install rcov でインストールする。ネイティブコードを含むため Windows 環境でインストールする場合、事前に DEVELOPMENT KIT のセットアップが必要である。
- rcov コマンドが使えるようになる。
- ruby コマンドの代わりに rcov コマンドを使うことでカバレージ(文網羅)*1を計測する。
- 計測結果は HTML を標準に、いくつかの出力形式が用意されている。
- 計測結果は蓄積が可能で、条件を変えて複数回実行した結果をまとめた計測結果が見れる。
- 独自にまとめた情報
- 参考
- メインサイト - relevance/rcov - GitHub
simplecov
- Ruby 1.9 では使えるが、Ruby 1.8 では使えない*2。
- gem install simplecov でインストールする。
- 参考
- メインサイト - colszowka/simplecov - GitHub
Guard
- ソースコードの変更を監視し、ソースコードの変更を検知して自動でテストを実行してくれるツール/ライブラリである。
- Guardfile というファイルに監視ルールを書いて利用する。
- Guardfile にはソースコードの変更に対して実行するテストコードの対応を記述する。
- gem install guard でインストールが必要である。
- その他、gem install guard-rspec など、テストライブラリに対応する gem のインストールも必要なようである。
- コマンド名は guard である。
- guard start で監視を開始する。