2016-11-12 11 views
0

ステップの一致はスコープ: https://github.com/techtalk/SpecFlow/wiki/Scoped-bindingsで判断できます。 これは静的なメカニズムです。 ように、このメカニズムを動的にする方法があります:(?属性)単一のシナリオでspecflowの動的ステップ定義の一致

  1. は私が
  2. で飾られ、このステップのための多くのステップの定義があります
  3. 二つ以上の同じステップを持っているが
  4. Iこのステップで設定されたキーセットのコンテキストとベースを変更するステップがあります。

これは、スコープのメカニズム+動的性からのタグ制限のようなものです。

私は異なるページで複数のテーブルを使ってアプリケーションをテストします。テーブルに行が(サブセットれる)

  • 表は、正確な行(アイテムやオーダー)(等しい)
  • テーブル行を持っている(ただし、順序は重要ではありません)が含まれ

    • :どうかは確認する必要があります。

    私が書いている:

    When I am on Page1 
    Then I expect that table contains 
    | Column1Name | Column2Name | Column3Name | 
    | row1id    | true     | address   | 
    | row2id    | true     | address   | 
    When I do some change action on rows 
    | Column1Name | 
    | row1id    | 
    Then I expect that table contains 
    | Column1Name | Column2Name | 
    | row1id    | false    | 
    | row2id    | true     | 
    

    私は「私は、そのテーブルが含まれている期待する」ための唯一の1ステップの定義を持っています。 ステップで提供されたセルを検証します。 この手順は、異なる列とページに対して異なるページで使用されます。 これらのページには、異なるビジネスオブジェクトが表示されますが、列は異なりますが、UIはかなり一般的です。 これがなければ、各ページと各列の組み合わせのステップを記述する必要があります。

    しかし、いつものように、「私にはそのテーブルが含まれていると思う」前に取らなければならない特定のアクションがあります。 例:

    • 異なる検索フィルタを別のページで使用できます。
    • 行動が変わる前に必要とされるタイムアウトは、それがシナリオは、不必要な情報でオーバーロードされていることになりますので、私は明示的にそれを書きたくはありません(サービス、キャッシュ、など)

    UIに表示されます。

  • +0

    これは不可能であり、混乱させる可能性があるようです。なぜあなたはこれが欲しいと思いますか?あなたのユースケースは何ですか?見つけようとしているものより良い解決策があるかもしれません。 –

    +0

    お返事ありがとうございます。私はそれが混乱するかもしれないとあなたに同意する。私は自分の質問を編集し、サンプルシナリオドラフトとコンセプトを追加しました。私は私の場合、多くの同じ/類似のステップ定義に書き込むことを避けたい。 – bwojdyla

    答えて

    0

    サムホルダーが書いたように、それは不可能ですが、ステップクラスに動作を注入することでそれを達成しました。 名前付きサービスとしてSpecFlow.Autofac.SpecFlowPluginの動作を登録します https://github.com/gasparnagy/SpecFlow.Autofac サンプルコードです。 Implementaionははるかに複雑です。ドラフトだけです。

    コンテキストキーを変更するステップがあります。上記のBehaviorクラスと同じです。

    public interface ITableBehavior 
        { 
         void Search(Table table); 
        } 
    
        [ContextKey("Page1")] 
        public class Page1Behavior : ITableBehavior 
        { 
         public void Search(Table table) 
         { 
          throw new System.NotImplementedException(); 
         } 
        } 
    
        [ContextKey("Page2")] 
        public class Page2Behavior : ITableBehavior 
        { 
         public void Search(Table table) 
         { 
          throw new System.NotImplementedException(); 
         } 
        } 
    
        [Binding] 
        public class Step 
        { 
         private ITableBehavior TableBehavior { get { return BehaviorResolver.Resolve<ITableBehavior>(); } } 
    
         [Then("I expcet that table contains")] 
         public void TableContains(Table table) 
         { 
           TableBehavior.Search(table); 
           //table contains implementation 
         } 
        } 
    
    関連する問題