11

私は SpecFlow に足を踏み入れていますが、本当に楽しんでいます。

いくつかの厄介な問題を除いて...機能やシナリオのセットアップコードなど.

という 1 つの「汎用」ファイルInfrastructureSteps.csには、すべてのシナリオで実行する必要がある一般的なセットアップ コードがあります。したがって、私のメソッドは次のようになります。

[BeforeScenario]
public void SetupDbContext()
{
    // define some basic stuff, set up a database transaction context etc.
}

これはすべてのシナリオの前に実行する必要があり、これまでのところ問題なく機能しています。

しかし今、テスト固有のステップ ファイルに 2 つのシナリオがあり、実行する前に非常に広範なセットアップが必要です。.featureだから私はタグで彼らのシナリオをマークしました:

@needs_extra_setup
Scenario: .....
   Given .....
   When .....
   Then ......

テスト固有のBeforeScenarioセットアップ方法を実装しました。

[BeforeScenario("needs_extra_setup")]
public void DoExtraSetupForMyScenario()
{
   // do stuff
}

それは機能します-呼び出されます-しかし、汎用メソッドが呼び出される[BeforeScenario]に呼び出されます:-(したがって失敗します-その汎用セットアップメソッドでセットアップされているものが存在せず、コードが失敗します。

では、SpecFlow でメソッドを並べ替える方法はあり[BeforeScenario]ますか? または、オーバーライドされたメソッドで基本メソッドを呼び出すように、特定の[BeforeScenario]メソッドに「基本」メソッドを最初に実行するように指示できますか?[BeforeScenario]

もちろん、その「ベース」[BeforeScenario]メソッドを明示的に呼び出すこともできますが、それは大ハンマーのアプローチのように思えます.....

何か案は?考え?ポインタ?

4

3 に答える 3

7

シナリオの実行順序を順序付けできる (そしておそらくそうすべきではない) と確信しています。

ただし、BeforeFeature などの他のフックを使用して、その方法で回避することもできます。

別の方法は、一般的なものが特定のものに設定されているかどうかを確認するフラグを単純に設定し、SetupDbContext メソッド (または SetupDbContext が順番に呼び出すもの) を呼び出すことです。

ScenarioContext.Currentディクショナリを使用して、フラグを保存します。

これがお役に立てば幸いです

于 2012-07-26T18:42:13.600 に答える
4

私も同じ問題を抱えていました。結局使ってしまった

if(ScenarioContext.Current.ScenarioInfo.Tags.Contains("needs_extra_setup"))

[BeforeScenario] メソッドの最後に。マーカスによって既にリンクされているページで説明されています: SpecFlow Hooks

于 2012-12-06T10:22:35.147 に答える
2

これは、執筆時点ではベータ版である specflow の v2 で可能になりました。

ステップ バインディング属性には、フックの順序を指定できるオプションの order プロパティがあります。小さい数字が最初に処理され、デフォルトの注文値は 10,000 です。

于 2015-06-16T15:06:08.620 に答える