web-dev-qa-db-ja.com

RSpec vs Cucumber(RSpecストーリー)

いつRailsアプリケーションとCucumber(以前のrspec-stories)の仕様を使用する必要がありますか?もちろん、仕様がどのように機能し、積極的に使用されるかを知っています。これに関する現在の見解は、クライアント用のアプリケーションを実装しているときにCucumberを使用するのが便利であり、システム全体がどのように動作するかまだ理解していないということです。

しかし、自分のプロジェクトをやっている場合はどうでしょうか?ほとんどの場合、システムの各部がどのように相互作用するかを知っています。私がする必要があるのは、たくさんの単体テストを書くことです。そのときキュウリが必要になる可能性のある状況は何ですか?

また、対応する2番目の質問として、Cucumberストーリーを作成する場合、仕様を作成する必要がありますか?同じことの二重テストではないでしょうか?

137
snitko

まだ行っていない場合は、ダンノースの優れた記事 What in a Story? を出発点としてご覧ください。

Cucumberストーリーには主に2つの用途があります。まず、ストーリー形式は非常に具体的であるため、製品所有者が構築したい機能の明確な表現に集中するのに役立ちます。これは、ストーリーの「会話のトークン」の使用であり、コードでストーリーを実装するかどうかに関係なく価値があります。第二に、プロセスが十分に機能して、完全なストーリーbeforeが得られると、機能の記述を開始します(毎日よりも理想的なものを目指します)現実)、受け入れ基準が明確に記述されており、構築するものと量を正確に知っています。

Railsの作業では、Cucumberストーリーはrspec単体テストの代わりになりません。この2つは密接に関連しています。実際には、単体テストはモデルとコントローラーの開発を促進し、ストーリービューの開発を促進する傾向があり(ビューのrspecを作成しない傾向があります)、ユーザーの観点からアプリケーション全体の適切なテストを提供します。

ソロで作業している場合、コミュニケーションの面はそれほど面白くないかもしれませんが、Cucumberから得られる統合テストは興味深いかもしれません。 webrat を利用する場合、Cucumberの作成は、基本的な機能の多くで高速で簡単です。

115
Abie

サイクルと考えてください:

Cucumberの機能を作成し、その機能のピースを開発しながら、仕様を作成して個々のコンポーネントを完成させます。機能が合格するのに十分な機能を記述し終わるまで仕様を完成させ、次の機能を記述します。

26
Josiah Kiehl

私の考えでは、ほとんどの状況でCucumberを使用するのは悪い考えです。なぜなら、構文があなたにもたらす生産性のコストのためです。 なぜキュウリのテストに悩むのですか?

21
Jack Kinsella

キュウリのストーリーは、個々のコードが機能する場合(つまり、単体テスト)ではなく、アプリケーションが解決している全体的な問題の詳細です。

Abieが説明しているように、これはアプリケーションが満たすべき要件のリストであり、クライアントとの通信に非常に役立ち、直接テスト可能です。

8
Dave Glassborow

最近では、CapybaraおよびSelenium Webdriverでrspecを使用でき、すべてのCucumberストーリーパーサーを構築および保守する必要がなくなります。ここに私がお勧めするものがあります:

  1. ストーリーを書きます
  2. RSpecを使用して、統合テストex:spec/integrations/socks_rspec.rbを作成します
  3. 次に、新しい記述を含む統合テストを作成し、シナリオごとにブロックします
  4. 次に、統合テストを取得するために必要な最小限の機能を実装し、さらに深く(コントローラーやモデルなどに)行きながら、コントローラーやモデルでTDDを実行します。
  5. 戻ってくると統合テストに合格し、統合テストにステップを追加し続けることができます。
  6. 繰り返す

ただし、コントローラーと統合テストは重複している可能性があるため、時間を無駄にしないために最善の判断を下す必要があることに注意してください。

また、グルーブを見つけたら、BDDを使用して開発するのが最も楽しいことに気付くでしょう。君ならできるさ!

6
PeppyHeppy

しかし、自分のプロジェクトをやっている場合はどうでしょうか?ほとんどの場合、システムの各部がどのように相互作用するかを知っています。私がする必要があるのは、たくさんの単体テストを書くことです。そのときキュウリが必要になる可能性のある状況は何ですか?

あなたはまだキュウリが必要です。システムがどのように機能するかを文書化するために必要であり、物事を変更するときに機能が壊れていないことを確認するために必要です。

つまり、ユニットテストが必要なのと同じ理由で、Cucumberストーリーが必要です。それらは、より高いレベルの抽象化で動作するだけです。

2