Specflowでは、ステップ定義間でコンテキストを共有することが可能ですdependency injectionSpecflowの依存性注入は、機能ごとに1つのコンテキストオブジェクトですか?
これは、それぞれの機能に異なる「コンテキスト」クラスがあるということですか?
もしそうなら、これは機能間でステップ定義を共有することが実際的ではないでしょうか?フィールドが設定されているとしますか?
Specflowでは、ステップ定義間でコンテキストを共有することが可能ですdependency injectionSpecflowの依存性注入は、機能ごとに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 |
:
Whこの機能のためのステップを実施する途中、私たちは、おそらくこのように編成ステップファイルになってしまいます:
AuthSteps
Given I'm registered as __
Given I'm logged in as __
TodoItemsSteps
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など...)
オブジェクトの有効期間はシナリオごとです。これは、すべてのシナリオ/テストで個別のインスタンスを取得することを意味します。
このように、異なるテスト間で状態を共有することはできないため、相互に影響することはありません。
IMHOあなたのシステムでは、テストの機能に基づいてではなく、「ドメイン」に基づいたコンテキストを使用する必要があります。
このようなコンテキストは、懸念のカプセル化が良好であり、より論理的であることがわかりました。したがってUserContext
、CartContext
、PaymentContext
などがあります。これらのコンテキストで関数またはデータが必要な手順では、コンストラクタでそれらを要求します。
Andreas氏によると、specflowはシナリオごとに分離されるようにコンテキストを管理します。
これは機能に依存しません。すべてのシナリオには独自のコンテキストがあり、シナリオが終了すると終了しますが、異なる機能は同じコンテキストを使用できます
「フィールドが設定されていると思われますか?ステップファイルのプライベートフィールドを参照していますか? –