2012-02-14 10 views
3

BDDを適用し、SpecFlowとSeleniumを使用しています。受け入れ基準はGherkinで指定されています。Gherkinシナリオ(SpecFlow/BDD/Selenium)で 'Given'を実装するにはどうすればよいですか?

私はGiven節に関する質問があります。

の例では、...のためので、私が注文詳細ページ

  • に私がオーダー
  • を提出するときに、私は順序の概要を参照してください
    • を与えられるかもしれません「注文の詳細ページに掲載されています」というメッセージが表示されたら、ログインして、注文を送信する準備ができている必要があります。しかし、どうすればその点に到達できますか?

      我々はすでに、関連する既存のSpecFlowに、我々は右のポイントを取得する(セレン経由)これらを使用することができます手順をお持ちの場合は - このような何か...

      • 私は登録ユーザー
      • 午前与えられ、私は
      • ログインページにそして私は私の登録したユーザー名を使用してログインし、パスワードと私は
      • 新しい秩序を作成して、私はXYZ製品
      • を検索します私は順序
      • を送信するとそれから私は、私たちも、すべてのこれらのステップを置くことができるための要約

      を参照してください

    • そして、私は順序
    • に製品を追加し、私は
    • 注文の詳細ページを選択します「注文の詳細ページにあります」の下のステップコードで

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

      私はここに間違いがないと思っています。私はそれがとてもうまくいっていると言わなければならないが、我々は常に我々のアプローチを改善しようとしている。本当の経験を持つ人から聞くことに非常に興味があります。

      私が(助けるが、それはないと思うことができない! - ので、私を撃墜しないでください場合)スタックオーバーフローが、このために右のフォーラムであると思います...

    答えて

    4

    あなたは統合テストを行っていると仮定して、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に設定するだけです。同様に注文を設定します。テストしていないプロダクションコードに頼らないでください。間違った状況でテストが失敗することもあります。

    指定した手順を再利用することはできますが、実動コードに頼るべきではありません。

    +0

    ありがとうございました。 「あなたは統合テストを行っていると仮定しているので、DBにアクセスすることは理にかなっています。はい、あります。 「セレンは自動テストを自動化します。私はあなたのデータを設定するためにそれを使用しません」と「正しい状態でレコードを作成するのがよりクリーンだと感じています。私は同意します - これは正しいアプローチです。これにはオーバーヘッドがありますが、それほど脆弱ではなく、これらの他のステップが最初にコード化されていなくても機能を開発することができます。 –

    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 
    } 
    
    +0

    ありがとうございます - はい、この機能を認識しており、ステップ内のステップをうまくグループ化する方法です。 –

    +0

    申し訳ありませんが、私はより良い質問を読まなければなりませんでした。セレンを使う - いいえと言いたい。まず第一に、dbで直接操作するより時間がかかります。第2に、注文を作成するなど何かがうまくいかない場合は、必要な機能をテストすることができません。テストは可能な限り原子レベルで行う必要があります。したがって、この場合は治具/工場が最適です。 – p0deje

    +0

    ありがとう@ p0deje。私はそれが間違いなく最良のアプローチであることに同意します。 –

    関連する問題