2016-05-11 15 views
0

現在、1つのフィーチャーファイルに約15のシナリオがあり、それらの間でデータを共有したいと考えています。私はコンテクストインジェクションがうまくいくと思っていました。シナリオ内のステップ間で作業していましたが、あるシナリオから別のシナリオにデータを渡すことができません。他の誰もこれをどのように達成していますか?あなたは全体の機能の有効なデータを持っている場合は、機能のコンテキストに配置シナリオ間でデータを共有するSpecflow

答えて

0

短い答え:それは

長い答え™悪いアイデアだと

誰もが、これを行います。しかし、このデータはあるシナリオでは変更できず、別のシナリオではアクセスできません。

テストは、テストランナーが決定した順序で実行されます。異なるランナーは異なる注文を選ぶかもしれません。実行命令は、ランナーの次のリリースから変更することができます。テスト間の時間的結合や暗黙的な依存関係があると、他の問題も起こります。たとえば、自分でテストを実行したい場合はどうなりますか?以前のテストが最初に実行されなかったので、今度は失敗します。テストを並行して実行したいのですが?テストには依存関係があるので、最初に実行する必要はありません。

どうすればいいですか?

私の提案は、個々のシナリオに必要なデータを設定するためにバックグラウンドステップ(または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を持つことができます。

+0

[私の答えはこちら](http://stackoverflow.com/a/30777405/97614)も参照してください。 –

関連する問題