3

BDDを適用し、SpecFlowとSeleniumを使用しています。合格基準はGherkinで指定されています。

与えられた節に関して質問があります。

例は...

  • 私が注文の詳細ページにいるとすると
  • 注文を送信するとき
  • 次に、注文の概要が表示されます

したがって、「注文の詳細ページにいる場合」は、ログインして注文を送信する準備ができている必要があります。しかし、どうすればそのポイントに到達できますか?

関連する既存のSpecFlowステップがすでにある場合は、これらを(Selenium経由で)使用して適切なポイントに到達できます-このようなもの...

  • 私が登録ユーザーであるとすると
  • そして、私はログインページにいます
  • 登録したユーザー名とパスワードを使用してログインします
  • そして、私は新しい注文を作成します
  • そしてXYZ製品を検索します
  • そして、注文に製品を追加します
  • そして、注文の詳細ページを選択します
  • 注文を送信するとき
  • 次に、注文の概要が表示されます

これらのすべてのステップを、「注文の詳細ページにいる場合」の下のステップコードに入れることもできます。

ただし、Givenを実装するためにSeleniumを使用する権利はありますか?または、UIを使用せずに、セッション/データベースに関連するすべての状態/データを設定する方法を見つける必要がありますか?

ここには正しいことも悪いこともないのではないかと思います。それは私たちにとって非常にうまく機能していると言わざるを得ませんが、私たちは常にアプローチを改善しようとしています。ですから、実際の経験をお持ちの方からのご意見をお待ちしております。

Stack Overflowがこのための適切なフォーラムであることを願っています(仕方がないのですが、そうではないと思います-もしそうなら、私を撃墜しないでください!)...

4

2 に答える 2

5

統合テストを実行していると想定しているので、DBにアクセスするのは理にかなっています。

SeleniumはUIテストを自動化します-データの設定には使用しません。UIを変更すると、実際には最初の有効な注文状態のみに依存する必要があるテストが中断されるためです。

ログインなど、コードを実行するためにいくつかの手順が必要になる場合がありますが、実際には、このテストでテストしている手順ではありません。背景タグを使用して設定することを検討しましたか?

Feature: Order Details Page
As a customer ...
I want to ...
So that ...

Background: 
  #set up user authentication status
    Given I am logged in

  #set up order status to be consistent with this page
    And I have an order ready for submission

Scenario: I can submit my order
    ...etc...

Scenario: I can cancel my order
    ...etc...

このパターンでは、複雑な「注文ページにいます」が複数のバックグラウンドステップに分割され、有効な状態が設定されます。機能ファイルは、重複することなく、そのページの複数のアクションを参照できるようになりました。

統合テスト用のデータをどのように設定するかはあなた次第だと思います。しかし、正しい状態でレコードを作成する方がクリーンだと思います。

回避I log in using my registered username and passwordし、代わりに。を使用して認証ステータスを直接設定しI am logged inます。同様に注文を設定します。テストしていない本番コードに依存しないでください。信頼しないと、間違った状況でテストが失敗します。

指定された手順を再利用できますが、実稼働コードに依存するべきではありません。

于 2012-02-14T13:34:49.277 に答える
5

ステップ定義から他のステップを呼び出すことができます

[Given(@"I am on the order details page ")]
public void GivenIAmOnTheOrderDetailsPage()
{
     Given("I am a registered user");
     And("I am on the login page");
     // so on
}
于 2012-02-14T13:24:30.143 に答える