2012-04-16 3 views
3

私は倉庫内の同じコンテナに追加されるかもしれないアイテムに関するルールを強制するためのクラスを書く必要があります。そして、それを実装する前にキュウリに要件を翻訳したいと思います。キュウリのステップデータを適切に抽象化するには?

各アイテムには、「アイテムファミリ」(例:エレクトロニクス、ブック)、「アイテムステータス」(例:メイン在庫、不良在庫)、「バッチ」(例:1050,1051)などの属性があります。

私はこのためにキュウリのテストを書くためのいくつかの戦略を考えることができ、そして私は1つをお勧めしている知りたい:

:あなたは、製品ごとの属性をすべて列挙でき、まず

Given I have a tote containing: 
    | sku | client | family | status | batch | weight | 
    | 100000 | Foo  | garment | main | 1234 |  10 | 
When I add the item: 
    | sku | client | family | status | batch | weight | 
    | 200000 | Bar  | garment | main | 1234 |  10 | 
Then I should be told there is a Client conflict 

第二に、あなたがハードコーディングされた基本的な製品を持っており、そこから属性を異なる最小を指定して試みることができる:

Given I have a tote containing an item that's client "Foo" 
When I add an item that's client "Bar" 
Then I should be told there is a Client conflict 

これは、ステップDEFを前提としていinitionsは基本的な属性を保持し、属性がステップで言及されるときにそれらを上書きします。ここでは正しいアプローチで

Given I have a tote containing an item 
And I add an item with a different client 
Then I should be told there's a client conflict 

どれ指導:

最後に、あなたは、抽象化のさらなるステップを行くことができますか?

答えて

1

The Cucumber Bookからの回答は、あなたのチームの技術的でないメンバーにとって最もわかりやすいものになります。 QAの鉛とプロジェクトマネージャーと座って、同じ質問をしてください。私は同様の問題を抱え、最初の提案のようなものから始めました。それから、私はそれがあまりにも詳細で#3に飛び乗ったと決めました。その後、私はプロジェクトマネージャーに座り、データを作成するときに詳細は必要ないが、データを変更したとき(私たちの場合は請求書のラインアイテム値を更新する)値はステップにありました。

第6章The Cucumber Book「いつキュウリが悪いのか」は、正しいレベルのディテールに向けるのに本当に役立ちました。私は本当にあなたにそれを読んでもらうべきだと思います。特に、ユビキタス言語を思いつくことについての部分です。私はそれがあなたの組織の詳細なレベルの詳細を決定するのに役立つと思います。

最初のテストを使用するように誘惑された場合、私の質問は「どのくらいの頻度でこれらの値を変更しますか?」です。答えが「あまりない」または「決してない」の場合、テストの可読性に加わるかどうかを検討する必要があります。

P.S.私はまだThe Cucumber Bookを読んでいますが、これまでのところ、非常に有益でした。例えば、FactoryGirlに向けると、ソチョパータが示唆していました。

1

最初に述べたオプションは、最も柔軟で再利用可能なものです。最初のアプローチでは、基本的には必要な場合をカバーすることができますが、いくつかの短所があります。

2番目と3番目のオプションは読みやすく、テストを書く上で重要な要素です。さらに、実際にテストされているもの、すなわち、 "Foo"と "Bar"がそのシナリオ/機能で作るように見える重要な違いに焦点を当てているようです。テストを書くときにはこれも好まれます。

一般的に、イカはキュウリのテストを書くことは、自分を岩石と硬い場所の間に置くのと同じです。私は、開発者がシナリオを理解し維持するのを困難にするキュウリのステップを再利用し、再利用する傾向にあることに気づいた。 第2のアプローチでは、ステップを定義する上でより多くの作業が必要ですが、シナリオはよりクリーンで読みやすくなりますが、シナリオの作成に時間がかかり、大きなステップ定義ベースが生成されます。

If you really want Cucumber for bdd私はほとんどの場合、第2の選択肢に傾くだろう。フードの下でFactoryGirlなどを使用して、汎用オブジェクトを作成して一度に必要なものだけを上書きするようにしてください。

この情報が役に立ちましたら幸いです。