私はRailsアプリをセットアップしていて、いくつかのユニットテストを終えたばかりで、友人はどうやらフィクスチャはもはやクールではなく、人々はRSpecまたはshouldaを使用していると言いました。これらの他のツールキットを使用することの実際の利点は何だろうと思っていました。どんな情報でも大歓迎です。
-fREW
私はRailsアプリをセットアップしていて、いくつかのユニットテストを終えたばかりで、友人はどうやらフィクスチャはもはやクールではなく、人々はRSpecまたはshouldaを使用していると言いました。これらの他のツールキットを使用することの実際の利点は何だろうと思っていました。どんな情報でも大歓迎です。
-fREW
私は個人的にRSpecよりShouldaを好みます。私は、Shouldaの魔法の構文がRSpecよりも少ないことを発見しました。RSpecに関する私の問題は、それを声に出して読んだときに非常に読みやすいということですが、それを書くようになると、うーん、与えられたアサーションをどのように書くべきかわかりません。PragDaveは私よりも問題をよく説明しています。彼はShouldaも好きで、いくつかの例があります。
RSpec および同様のフレームワークは、ビヘイビア駆動開発を支援するために設計されたツールです。それらはテストを書くためのより良い方法であるだけではありませんが、それには役立ちます。
ここには BDD に関する多くの情報があります: http://behaviour-driven.org/ ウィキペディア: http://en.wikipedia.org/wiki/Behavior_Driven_Development
ここに挙げるにはあまりにも多くの利点があるので、そのサイトを少し閲覧することをお勧めします.
ここには 2 つの異なる点があります。
最初のことは、テスト/仕様を作成するために使用するフレームワークです。ここでは、Test::Unit、RSpec、Shoulda などから選択できます。選択肢は、従来の TDD (Test::Unit) を使用するか、David Chemlinskyのような開発者(RSpec およびある程度は Shoulda) によって提唱されている動作の指定について別の考え方を好むかどうかです。
2 つ目は、テスト データの処理方法です。Rails のフィクスチャと、FixtureReplacement プラグインなどの他の目的で設計された代替手段があります。Rails 2.0 より前のフィクスチャには、十分に文書化された重大な実用上の問題がありました。実際の問題の多くは Rails 2.0 で修正されました。ただし、フィクスチャは不注意なテスト結合につながる可能性があり、代替手段のいくつかはこれを回避しようとします。
RSpec は、テストの読み取りと書き込みの両方がはるかに簡単であるため、はるかに強力です。モックとスタブを使用する場合も非常にエレガントです。これは、テストでそれらを使用し始めると非常に役立つ概念です。簡単なテスト アプリ (NON RAILS!) で試してみると、仕様が同等の標準テストと比べてどれだけ洗練されているかがわかります。
人気のある Ruby テスト フレームワークの比較については、Josh Susser のThe Great Test Framework Dance-offを参照してください。
大規模なアプリケーションを構築していて、ブラック ボックス テストで十分にテストでき、多くのモックとスタブの使用/デバッグを完全に受け入れる準備ができている分離コードを書くのが得意なチームがいない場合は、そうしないでください。工場街道を下ります。
Awesome Factory がどのように機能するかについて読むと、ファクトリはフィクスチャよりも少し遅いため、大規模なアプリケーションでは実行できない可能性があるという警告が表示されます。
しかし、「少し遅い」は、実際には桁違いに遅くなります。
ファクトリは、フィクスチャを整理しておく限り、id にラベルを使用するフィクスチャよりもコーディングが大幅に簡単というわけではありません。また、ファクトリのデバッグが難しい場合もあります。
ちょうど今夜、1 つのファクトリをフィクスチャに変換したところ、それを使用したテスト ファイルの実行時間は 65 秒から 15 秒になりましたが、そのテスト ファイル内のテストの約 15% だけがそのファクトリを使用していました。
minitest を使用すると、ランダムな順序でテストを実行できます。これにより、テスト間のデータの結合がすぐに明らかになります。(rspec にテスト順序をランダム化するオプションがあるかどうかは不明)
Test::Unit は小さなアプリケーションに適しています。しかし、Shoulda や RSpec などのテスト フレームワーク (コンテキストなど) を使用することには多くの利点があります。
私は、Shoulda と RSpec がどちらかまたはどちらかの関係にあるとは考えていません。単一アサーション テストに関しては、RSpec の代わりに Shoulda を使用します。私は Shoulda ワンライナーが本当に好きですが、マッチャーを書くのは RSpec の方がはるかに簡単です。したがって、私のアドバイスは、最適な場所でさまざまなテスト ツールを使用することです。
RSpecよりもさらに高速なCucumberのようなテストフレームワークを使用できます。