24

BDD は「アウトサイド イン」の方法論であり、私が理解しているように、知っていることから始めることを意味します。ストーリーとシナリオを作成し、最も外側のドメイン オブジェクトを実装し、サービス レイヤー、ドメイン レイヤーなどを下って、「内側に」移動し、「意図的に」コラボレーターを発見します。まだ存在していないコラボレーターの場合は、あなたはそれを作るまでそれを嘲笑する(または「偽造する」). (これらの用語のいくつかは、Dan North と Kent Beck から直接盗用しています)。

では、UI はこれにどのように適合するのでしょうか?

North のブログ エントリの 1 つから借りて、彼は次のように書き直しました。

Given an unauthenticated user
When the user tries to navigate to the welcome page
Then they should be redirected to the login page
When the user enters a valid name in the Name field
And the user enters the corresponding password in the Password field
And the user presses the Login button
Then they should be directed to the welcome page

これに:

Given an unauthenticated user
When the user tries to access a restricted asset
Then they should be directed to a login page
When the user submits valid credentials
Then they should be redirected back to the restricted content

彼はこれを、UI ( 「名前フィールド」、「パスワード フィールド」、「ログイン ボタン」 ) など、関連のないドメインから言語を排除するために行います。これで、UI が変更されても、ストーリー (というか、ストーリーの意図) が壊れることはありません。

では、このストーリーの実装を書くとき、UI を使うべきでしょうか? ブラウザーを起動して、Selenium テストを介して「ユーザーが有効な資格情報を送信する」を実行するか、基盤となる実装 (認証サービスなど) に直接接続する方がよいでしょうか? ところで、私はBDD フレームワークとしてjBehaveを使用していますが、Cucumber、rSpec、またはその他の多くのものを簡単に使用できます。

私は自動化された方法で UI をテストしない傾向があり、Selenium のような GUI 自動化ツールには慎重です。なぜなら、テストは (1) 過度に脆く、(2) 実行コストが最大になる場所で実行されると思うからです。そのため、UI の美学と使いやすさを手動でテストし、ビジネス ロジックを下位の、より自動化が容易なレイヤーに任せることが私の傾向です。(そして、レイヤーが変更される可能性が低い可能性があります。)

しかし、私はこれについて回心することにオープンです。では、BDD は UI のためのものでしょうか。

PS。私はこのトピックで見つけることができる SO に関するすべての投稿を読みましたが、実際に私の質問に対処するものはありません。 これは最も近いものですが、UI を別の話に分けることについて話しているわけではありません。むしろ、BDD の目的で完全に無視することについて話しているのです。

4

3 に答える 3

17

自動化された BDD ツールを使用するほとんどの人は、UI レイヤーで使用します。UI が頻繁に変更されるため、いくつかのチームが次の層 (コントローラーまたはプレゼンター層) に移行するのを見てきました。あるチームは、顧客向けサイトの UI と管理サイトのコントローラーから自動化しました。これは、何かが壊れていても簡単に修正できるためです。

ほとんどの場合、BDD は、利害関係者と明確で明確な会話ができるように (またはあいまいさが残っている場所を発見できるように)、コードに言語を組み込むように設計されています。会話はツールよりもはるかに重要です。

ステップを記述する際に企業が使用する言語を使用し、Dan が提案するようにそれらを高いレベルに保つと、脆弱性がはるかに少なくなり、保守が容易になるはずです。これらのシナリオは実際にはテストではありません。これらは、システムをどのように使用するかの例であり、会話で使用でき、優れた副産物としてテストを提供します。どのレベルで行うにせよ、自動化よりも例を中心に会話をすることが重要です。

UI が安定している場合は、自動化を試してください。うまくいかない場合は、レベルを下げるか、十分な手動テストを行ってください。とにかく美学をテストしている場合は役立ちます (そして、美学をテストするために自動化を使用することは決してありません!) UI が安定していない場合は、自動化しないでください。その場合の自動化はそれを難し​​くします。

于 2012-04-27T18:44:59.863 に答える
2

私自身 BDD は初めてですが、cuke4ninja サイトがこの点で役立つことがわかりました。彼らが示唆しているのは(私の解釈)、「このボタンをクリックする」、「このフィールドに入力する」などの詳細をキャプチャするメソッドにグループ化する「ワークフロー」クラスを呼び出す、高レベルでUIに依存しないステップ定義があることですテスト中のワークフロー。特定の画面の UI オートメーションを処理する「スクリーン ドライバー」クラスを呼び出します。そうすれば、すべての UI 自動化コードがステップ定義から離れて抽象化され、1 つの場所に配置されます。UI が変更された場合は、複数のテストすべてではなく、「スクリーン ドライバー」のコードを変更するだけで済みます。話題になっている関連ページはこちらです。

于 2013-05-08T21:51:36.223 に答える