しかし、最も重要なのは、プロジェクトが同じリストで自動的にテストされることです。 テストツール(この場合はCucumber)は、リストを系統的に調べ、各機能の実装を注意深くチェックします。
Cucumberを使用した開発は、3つの主要なステップで構成されています。
このサイクルの最後に、すべてのプロパティがキュウリコントロールを通過すると、新しい機能のリストを顧客に承認し、サイクル全体を再度実行します。 すべてのプロパティを実装(追加および検証)するまでこれを行います。
第一段階。 特徴
一覧
たとえば、私たちはいつものように、新しいブログを開発しています。 そのため、ブログのプロパティをファイル
./features/blog.features
ます。 各プロパティについて、Why、Who、およびWhat(順序、A、Should)の概念も説明します。 これらはBDDの願いであり、実際、結果には影響しませんが、この機能から望むものをより明確に明確にするのに役立ちます。
機能:記事の投稿 旅行の写真を見せるために 所有者 記事を投稿できるようにする必要があります 機能:コメントを作成する 連絡するために ユーザー コメントをすることができるはずです
もちろん、すべてのプロパティをすぐに書き出す必要はありません。近い将来に実装する予定のプロパティの十分な数です。
シナリオ
プロパティには、1つ以上の動作シナリオがあります。 このシナリオでは、テストが行われます。 各シナリオは、条件(指定)、イベント(タイミング)、結果(次に)の3つのカテゴリで説明されています。 複数の条件、イベント、または結果がある場合は、追加の条件がAnd / Butを介して登録されます。
機能:記事の投稿 旅行の写真を見せるために 所有者 記事を投稿できるようにする必要があります シナリオ:所有者による記事の投稿 私が所有者としてサインアップしたことを考えると 「最後の近距離旅行について」という記事を書くとき 記事のテキストは「非常に大変な夜でした。」 そして、記事を投稿します 次に、「記事が作成されました」と表示されます シナリオ:ユーザーによる記事の投稿 ユーザーとしてサインアップすると 私の記事「私の幻想」を書くとき 記事のテキストは「..no more」です そして、記事を投稿します 次に、「記事を投稿するアクセス権がありません」と表示されるはずです。
この段階では、人とテストツールが理解できる機能のリストが既にあります。 そして今、あなたは実行することができます:
>キュウリの機能/ blog.features ... 2つのシナリオ(2つの未定義) 12ステップ(12未定義) 0m0.012s 次のスニペットを使用して、未定義のステップのステップ定義を実装できます。 与えられた/ ^私は所有者としてサインアップしました$ / do 保留中 終わり / /私が記事を書いたとき "([^ \"] *) "$ / do | arg1 | 保留中 終わり / ^記事のテキストが "([^ \"] *) "$ / do | arg1 | 保留中 終わり いつ/ ^記事を投稿する$ / do 保留中 終わり それから/ ^ "([^ \"] *) "$ / do | arg1 | 保留中 終わり
Cucumberは、次に何をすべきか、どのアクションを決定する必要があるかを示します(ステップ定義)。
ステージ2.アクションの定義(ステップ定義)
キュウリのヒントを
/features/step_definitions/blog_steps.rb
コピーし、アクションを書き留めます。例:
与えられた/ ^私は(。*)としてサインアップしました$ / Do | role | current_user = User.find_by_role(ロール) 終わり / /私が記事を書いたとき "([^ \"] *) "$ / do | arg1 | aricle = Article.create(:subject => arg1 ,: user => user) same_subject =件名 終わり / ^記事のテキストが "([^ \"] *) "$ / do | arg1 | aricle.text = arg1 終わり いつ/ ^記事を投稿する$ / do artricle.save! 終わり それから/ ^ "([^ \"] *) "$ / do | arg1 | response.should(arg1) 終わり
これで、機能のリストとその動作が定義されました。
ステージ3.テストと開発
テストを実行します。
>キュウリの機能/ blog.features 機能:記事の投稿 旅行の写真を見せるために 所有者 記事を投稿できるようにする必要があります シナリオ:所有者による記事の投稿#features / blog.features:6 所有者として登録した場合#features / step_definitions / blog_steps.rb:1 初期化されていない定数User(NameError) features / blog.features:7:「所有者として登録した場合」 「私の最後の旅行について」という記事を書くとき#features / step_de
ご覧のとおり、キュウリはユーザーを知らないと報告しました。 この場合、ユーザーモデルコードを作成します。
Cucumberを再び起動します。 このナズに、彼は別の間違いを誓います-私たちはそれを修正するためなどに別のコードを実装しています それまで。
キュウリがすべてのテストに合格すると、すべてのコードが実装されます。 このようにして、第3段階が完了し、アプリケーションのさらなる設計と新しい機能の実装に進むことができます。
興味深い場合は、次回、実際のアプリケーションが
Cucumber, Shoulda
、
webrat
ウィザードでどのように開発されているかを説明します。
PS
材料:
cukes.info-ウェブサイトキュウリ
nlp.od.ua/behavoir-driven-development-ロシア語でBDDについて
railscasts.com/episodes/155-beginning-with-cucumber-初心者向けスクリーンキャストCucumber
github.com/thoughtbot/clearance/tree/master-クリアランスには素晴らしいキュウリの例があります