6

私は Ryan Bates の RailsCasts を何年も前から見ており、サイトの有料部分の顧客でもあります。過去に Cucumber のエピソードを見て BDD を学びました。

TestUnit、RSpec、Capybara、MiniTest について学びました。私は何が何であるかについて混乱し始めています。

この4つのアイテムの違いは何ですか?Cucumber がプレーン テキスト機能を実行することは明らかであり、それは統合テストと見なすことができると思います。

しかし、最近のバージョンの Cucumber には MiniTest が必要であることがわかりましたか? Cucumber は、テスト フレームワークの上にある単なる DSL ですか?

RSpecには、アサーションを行うための独自の構文糖衣、「記述」ブロックがあることも知っています。また、MiniTest もこの構文をサポートしているようです。

生成されたWebページのコンテンツを見るためにCapybaraが使われていることは知っていると思います。

これが私の質問です:

新しい Rails 3.2 アプリケーションを作成する場合、これらのテスト プログラムのどの組み合わせを使用すればよいですか? さらに役立つのは、これらの宝石とそれに関連するプロセスが、該当する場合にどのように相互に補完するかを説明するリストです。

Cucumber is a DSL for driving BDD
Cucumber is for integration tests and is based on creating user stories that are customer-readable
It implements its tests behind the scenes via MiniTest
MiniTest is a new testing framework that comes with Ruby 1.9 and is very fast.
MiniTest is also used for unit testing, such as testing controllers and models
It does not yet have as many features as RSpec
Cucumber also uses Capybara to access DOM elements from a javascript-enabled browser simulator such as Selenium
When you test in Rails, you have the ability to do the following kinds of tests: controllers, views, models, and integration (MVC together)
Some people just do integration and model testing, because they feel that integration testing handles enough of the controller and view testing itself, and anything too complex can simply be moved up to the model

私のためにこれらのアイデアを解決するためにあなたが提供できるあらゆる助けに感謝します.

4

1 に答える 1

8

さて、私自身の経験に基づいて説明してみましょう

Cucumber は、ビジネス指向のドメイン言語でテストを作成できる ATDD (または BDD) ツールです。主な用途は、製品所有者との会話ツールです。詳細な要件を記述する代わりに、それらの要件をテスト対象のシステムの例として表現します。キュウリの各テストは、事実上、満たさなければならないビジネス要件になります。

Cucumber ツール自体は、これらのプレーンテキスト ステートメントを Ruby コードを実行するための小さなモジュールに変換します。ステップ定義内でどの Ruby ライブラリを使用するかは、作業しているプロジェクトに完全に依存します。

Cucumber を説明する最も安全な方法は、IT パートナーとビジネス パートナー間のコミュニケーションに重点を置いたテスト フレームワークであるということです。

Rspec と Minitest は、別の強みを持つ別のフレームワークですが、ほとんどがコードであり、非技術者にはほとんど読めないという点で、このビジネスの読みやすさの要素が欠けています。それは必ずしも悪いことではありません。特に、製品の所有者がもう少し無関心である場合はなおさらです。

これはカピバラのようなものとどのように結びつくのでしょうか? Capybara は、非常に高速なテストのために Rack::Test フレームワークでヘッドレス ブラウザを駆動する統合テスト自動化ライブラリであり、読みやすい DSL を備えています。唯一の欠点は、Rack::Test が JavaScript をサポートしていないため、JavaScript テストを実行している場合に Selenium にフェイルオーバーする方法を提供することです。Rspec と Cucumber の両方に、このフェイルオーバーをトリガーするメカニズムがあります。

Ruby 自動化ライブラリは他にもたくさんあります。たとえば、Rails 以外の Web アプリに対してテストを行っている場合、きゅうりのシナリオは、Javascript モードのときに Capybara が行うように、完全な Web ブラウザーを駆動する Watir-Webdriver で定義される可能性があります。主な違いは、WW は Capybara よりも堅牢な一連の selctors を持っているため、特にコードが非常にきれいでない場合は、少し簡単に記述できます (Capybara は ID、値、およびテキストによる選択のみをサポートしますが、WW は選択をサポートします)。ほとんど何でも)

したがって、ユニット テストには RSpec または Minitest を使用する可能性が高く、デフォルトの Test::Unit を使用し、統合テストには Cucumber を使用する可能性があります。関心のあるプロダクト オーナーがいる場合、またはテスト シナリオ用の共通言語が必要な場合。そうでない場合は、多くを失うことなく、Rspec の例または同等の minitest として統合テストを作成できます。

于 2012-05-14T15:16:54.417 に答える