2017-03-07 5 views
3

Specflowでは、ステップ定義間でコンテキストを共有することが可能ですdependency injectionSpecflowの依存性注入は、機能ごとに1つのコンテキストオブジェクトですか?

これは、それぞれの機能に異なる「コンテキスト」クラスがあるということですか?

もしそうなら、これは機能間でステップ定義を共有することが実際的ではないでしょうか?フィールドが設定されているとしますか?

+0

「フィールドが設定されていると思われますか?ステップファイルのプライベートフィールドを参照していますか? –

答えて

1

これは、それぞれの機能に異なる「コンテキスト」クラスがあるということですか?

私はこれが当てはまるとは思わない。スペックを書くときには、あなたのシステムのいくつかの "種類"について言及しています。我々は次のシナリオを持っているとしましょう:私たちは、システムのいくつかの部分と相互に作用している。この場合

Scenario: List todo items 
    Given I'm registered as [email protected] 
    And I'm logged in as [email protected] 
    And I add a todo item with the text 'Listen to stackoverflow podcast' 
    When I list all my todo items 
    Then I should see the following items 
    | Text       | Completed | 
    | Listen to stackoverflow podcast | false  | 

  • 登録
  • 認証
  • TodoItem作成
  • TodoItemリスト

Whこの機能のためのステップを実施する途中、私たちは、おそらくこのように編成ステップファイルになってしまいます:

  • AuthSteps
    • Given I'm registered as __
    • Given I'm logged in as __
  • TodoItemsSteps
    • この場合、3210
    • When I list all my todo items
    • Then I should see the following items

私たちは、私はすべてののToDo項目をリストすると」のようなものを言うことができるようにCurrentUserの価値を共有したいコンテキストの注入を使用して現在のユーザを参照します。このようにして、他のステップファイル内の他のステップは、前のステップの文脈になることができます。

一方、これらの機能特有の問題を共有する唯一の手順は同じ機能ファイル内にあるため、When I list all my todo itemsの結果をコンテキストインジェクションには使用しません。 Then I should see n itemsのように、then「ステートメント」の複数のバリエーションを使用できます。

私はあなたが構築しているサービスの依存関係を共有するためにコンテキストインジェクションを使用して複数のクラスを使用しているかもしれませんが、おそらくサービス自体(Storage、Sessionなど...)

1

オブジェクトの有効期間はシナリオごとです。これは、すべてのシナリオ/テストで個別のインスタンスを取得することを意味します。

このように、異なるテスト間で状態を共有することはできないため、相互に影響することはありません。

1

IMHOあなたのシステムでは、テストの機能に基づいてではなく、「ドメイン」に基づいたコンテキストを使用する必要があります。

このようなコンテキストは、懸念のカプセル化が良好であり、より論理的であることがわかりました。したがってUserContextCartContextPaymentContextなどがあります。これらのコンテキストで関数またはデータが必要な手順では、コンストラクタでそれらを要求します。

Andreas氏によると、specflowはシナリオごとに分離されるようにコンテキストを管理します。

0

これは機能に依存しません。すべてのシナリオには独自のコンテキストがあり、シナリオが終了すると終了しますが、異なる機能は同じコンテキストを使用できます

関連する問題