2013-04-17 8 views
6

私はキュウリでショッピングカートBDDを開発しています。カートはかなり複雑で、多くの鐘や笛がありますが、これは「ブログ」や「ユーザープロファイル」でも同様です。ガーキンとキュウリの特徴とは何ですか?

私はいつも機能する「カート」と考えられてきたとベル・アンド・ホイッスルはシナリオ年代します。しかし、これは大きいフィーチャーファイルを作ることができ、という文字通りの意味に反する。シナリオ。それはどのように見えるかです:

Feature: Cart 

    So that I can buy items 
    As a user 
    I want to place items in a cart 


    #.... Many more scenarios 

    Scenario: Empty a filled cart 
    Given 2 products in my cart 
    When I visit the cart page 
    And I press "Empty cart" 
    Then I should see the text: 
     """ 
     Your cart is empty. 
     """ 

    Scenario: Empty an empty cart 
    Given 0 products in my cart 
    When I visit the cart page 
    Then I should not see the "Empty cart" button 

    # Many more Scenario's 

詳細が記入されると、この「空のカート」グループになります。私は "空の荷車"はスタンドアロンの機能と見なされるべきなのだろうか?これにより、フィーチャーが多数含まれていますが、すべてというシナリオが含まれます。 シナリオのは、「コンテキスト」のようになります。そのような:

Feature: Emptying Cart 

    So that I can reconsider my shopping-spree 
    As a user 
    I want to empty my cart 

    Scenario: with a filled cart 
    Given 2 products in my cart 
    When I visit the cart page 
    And I press "Empty cart" 
    Then I should see the text: 
     """ 
     Your cart is empty. 
     """ 

    Scenario: with an empty cart 
    Given 0 products in my cart 
    When I visit the cart page 
    Then I should not see the "Empty cart" button 

機能何かを作るための適切なガイドラインとは何ですか?いつ再加入する必要がありますかシナリオは自分でフィーチャー?どのくらい多くシナリオのフィーチャーによくありますか?

答えて

9

あなたのシナリオを短くすることができます - とさえ少数を取り除く - declarative, rather than imperativeでそれらをフレージングすることにより、言語。例えば

Given the cart has two products in 
When I empty the cart 
Then I should see it has nothing in it. 

これは、UIとして、実際のショッピングカートのと同じように真である可能性があります。実装の詳細はありません。ステップのいくつかは、複数のステップに対応しています。より保守的なコードの複雑さを維持するので、これは良いことです。

私たちはあなたのフレーズ、他のシナリオをこのようにした場合、我々が得る:

Given my cart is empty 
Then I should not be able to empty it again. 

「それから」その状態のため、単純に真であるため、何の「とき」ここにはありません。

本当にこのシナリオは必要ですか?すでに空のカートを空にする機能を使って、あなたやあなたの会社を解放して解放することはできますか?これは本質的に審美的です。 UIが使いやすくなるように追加されており、の方法では、UIが使用可能かどうかを実際に確認することができます。このようなシナリオを見つけた場合は、それらを取り除くことをお勧めします。ボタンを有効または無効にするロジックを、常にユニットテストすることができます。

この言語のスタイルに変更してから、美学と使いやすさをテストするだけのシナリオを削除すると、機能ファイルが大幅に小さくなります。

また、最も興味深いシナリオや驚くべきシナリオを上に置くことをおすすめします。例えば、これはもっと面白いシナリオだろう(と、それは2人の異なるユーザー間の相互作用に関連付けられた動作を記述しているので、はい、それは、その2つの「whens」を持っている):

Given a user put a copy of "Moby Dick" in his cart 
When the last copy of "Moby Dick" is sold 
And the user comes back to look at his cart 
Then it should tell him, "Sorry, this item is currently out of stock." 

これはもっとだろう興味深い:

Given a user put a new copy of "Moby Dick" in his cart 
And there are second-hand copies of "Moby Dick" available 
When the last new copy of "Moby Dick" is sold 
And the user comes back to look at his cart 
Then it should tell him, "Sorry, this item is currently out of stock." 
And it should also show the way to the second-hand copies with, 
    "2nd hand copies are available." 

それは差別的なシナリオでしょう。あなたの店が他の店とは違ったやり方で、ビジネスに大きな関心を寄せていたこと。

最も興味深いものを一番上に置くことで、フィーチャファイルが長いことは問題になりません。私たちは皆、カートが商品を売買するためにどのように働くかを知っていますし、とにかくそのステージの底にあるシナリオを読んでいるわけではありません。

Andy Waite is rightハードルールがないと言うと、耳で再生します。それがうまくいかない場合は、何か別のことをしてください。うまくいけば、これらのヒントも役に立ちます。

2

フィーチャをフォルダにグループ化することができます。あなたは、フォルダcartを持っているし、その後など

何のハードルールはありません、emtpy_cart.featureupdate_cart.featureためのファイルを備えていますが、個人的に私は、単一の機能ファイルで約8シナリオ以上に入れないだろう可能性があります。

は、機能を構造化する方法の偉大例えばレリッシュ独自のドキュメントをチェックアウト:https://www.relishapp.com/relish/relish

関連する問題