現在、1つのフィーチャーファイルに約15のシナリオがあり、それらの間でデータを共有したいと考えています。私はコンテクストインジェクションがうまくいくと思っていました。シナリオ内のステップ間で作業していましたが、あるシナリオから別のシナリオにデータを渡すことができません。他の誰もこれをどのように達成していますか?あなたは全体の機能の有効なデータを持っている場合は、機能のコンテキストに配置シナリオ間でデータを共有するSpecflow
:
現在、1つのフィーチャーファイルに約15のシナリオがあり、それらの間でデータを共有したいと考えています。私はコンテクストインジェクションがうまくいくと思っていました。シナリオ内のステップ間で作業していましたが、あるシナリオから別のシナリオにデータを渡すことができません。他の誰もこれをどのように達成していますか?あなたは全体の機能の有効なデータを持っている場合は、機能のコンテキストに配置シナリオ間でデータを共有するSpecflow
:
短い答え:それは
長い答え™悪いアイデアだと
誰もが、これを行います。しかし、このデータはあるシナリオでは変更できず、別のシナリオではアクセスできません。
テストは、テストランナーが決定した順序で実行されます。異なるランナーは異なる注文を選ぶかもしれません。実行命令は、ランナーの次のリリースから変更することができます。テスト間の時間的結合や暗黙的な依存関係があると、他の問題も起こります。たとえば、自分でテストを実行したい場合はどうなりますか?以前のテストが最初に実行されなかったので、今度は失敗します。テストを並行して実行したいのですが?テストには依存関係があるので、最初に実行する必要はありません。
どうすればいいですか?
私の提案は、個々のシナリオに必要なデータを設定するためにバックグラウンドステップ(またはgivensの明示的な手順)を使用することです。 Specflowはこれらのステップを再利用したり、これらのステップで他のステップを再利用させたりします。オーダーを作成するために、顧客と製品を必要としますが、このようなシナリオを持っているのであれば:ここ
Scenario: Creating a customer
Given a create a new customer called 'bob'
When I query for customers called 'bob'
Then I should get back a customer
Scenario: Creating a product
Given a create a new product called 'foo'
And 'foo' has a price of £100
When I query for products called 'foo'
Then I should get back a product
And the price should be £100
Scenario: customer places an order
Given I have a customer called 'bob'
And I have a product called 'foo' with a price £100
When 'bob' places an order for a 'foo'
Then an order for 1 'foo' should be created
を最後のシナリオは、それが必要とするすべてのデータを作成します。それはGiven a create a new customer called 'bob'
として(異なるGiven
属性を持つ)同じ手順を再利用することができますし、それだけでこれはテストが単離されることを保証し、すべての依存関係を持っていない既存の2つのステップGiven a create a new product called 'foo' And 'foo' has a price of £100
を呼び出し、新しいステップAnd I have a product called 'foo' with a price £100
を持つことができます。
[私の答えはこちら](http://stackoverflow.com/a/30777405/97614)も参照してください。 –