質問
Specflowを使用して、BDDスタイルのテストを行います。私の機能のいくつかはUIテストなので、Watinを使用しています。一部はUIテストではないので、そうではありません。
現時点では、シングルがあります StepDefinitions.cs
私のすべての機能をカバーするファイル。私は持っています BeforeScenario
Watinを初期化するステップ。これは、私のすべてのテストが必要かどうかにかかわらず、インターネットエクスプローラーを起動することを意味します。
Specflowに、特定のステップ定義のセットに関連付けられた特定の機能ファイルを持つ方法はありますか?それとも私はこれを間違った角度から近づいていますか?
解決
タグを使用する場合、問題には簡単な解決策があります。
最初にタグを付けて、特定の機能にそのようなWatinが必要であることを示すファイルを掲載します。
Feature: Save Proportion Of Sample Pool Required As an <User> I want to <Configure size of the Sample required> so that <I can advise the deployment team of resourcing requirments>. @WatiN Scenario: Save valid sample size mid range Given the user enters 10 as sample size When the user selects save Then the value is stored
そして、タグを示す属性でbeforescenarioの結合を飾ります。
[BeforeScenario("WatiN")]
public void BeforeScenario()
{
...
}
このBeferescenarioメソッドは、Watinを使用する機能に対してのみ呼び出されます。
他のヒント
現在(Specflow 1.3で)ステップ定義はグローバルであり、特定の機能に合わせることはできません。
これは、キュウリと同じ動作をするための設計によるものです。
キュウリのグループで同じ質問をしました。
ベースラインは、すべての機能ファイルによって定義される言語もグローバルでなければならない(アプリケーション全体のグローバルな動作の1つ)。したがって、機能の定義をスコーピングすることは避ける必要があります。個人的に私はまだこれについて完全に確信していません...
ただし、UI統合を必要とするシナリオのみでWatinを開始することの問題は、2つの異なる方法で解決できます。
タグとタグ付けされたフック:シナリオ(@Webを使用して)にタグを付けて、特定のタグ(つまり[beforescenario( "web")))でシナリオを実行する必要があるIna beforescenario-hookを定義できます。本屋の例では、セレン統合を参照してください。 http://github.com/techtalk/specflow-examples/blob/master/asp.net-mvc/bookshop/bookshop.acceptancetests.selenium/support/seleniumsupport.cs
多くの場合、プログラマティックAPI(IEコントローラー、ビューモデル...)にバインドされているUIおよびシナリオにバインドされるシナリオを完全に分離します。本屋の例でこれを説明しようとしました。 http://github.com/techtalk/specflow-examples/tree/master/asp.net-mvc/bookshop/ .
これをチェックしてください(Specflow 1.4の新機能): https://github.com/techtalk/specflow/wiki/scoped-bindings
私はもともと、ステップファイルが特定の機能ファイルに関連付けられていると想定していました。これが真実ではないことに気付いたら、すべてのSpecflowコードと機能ファイルを改善するのに役立ちました。私の機能ファイルの言語は、コンテキストが依存していないようになりました。これにより、より再利用可能なステップ定義とコードの複製が少なくなりました。これで、一般的な類似性に従ってステップファイルを整理しますが、どの機能のためではありません。私が知っている限り、ステップを特定の機能に関連付ける方法はありませんが、私はスペックフローの専門家ではないので、それについて私の言葉を聞かないでください。
ステップファイルを特定の機能ファイルに関連付けたい場合は、同様の名前を付けてください。ステップコードがその機能に対してのみ理にかなっていても、その機能のみで機能することを強制される必要はありません。これは、たとえ別の機能の重複ステップを作成したとしても、これを曖昧な一致として検出するためです。あいまいな一致の動作は、app.configファイルで指定できます。見るhttp://cloud.github.com/downloads/techtalk/specflow/specflow%20guide.pdf詳細については、About app.configファイル。デフォルトでは、あいまいな一致が検出され、エラーとして報告されます。
編集]:実際には、この方法で作業することに問題があります(心の機能のみに関連するステップファイルがあります)。問題は、.featureファイルを追加または変更し、以前に使用したのと同じ言葉遣いを使用し、そのためのステップを追加することを忘れている場合に発生しますが、以前にその言葉遣いのステップをすでに作成したため、これに気付かない、そしてそれは文脈に敏感な方法で書かれました。また、ステップファイルを機能ファイルに関連付けていないという有用性については、もはや確信していません。私は、ほとんどのクライアントがコンテキストに依存しない方法で仕様を書くのに非常に優れているとは思わない。それは私たちが通常書く、話したり、考えたりする方法ではありません。
これの解決策は、Webに関連するテストシナリオ、またはコードのコントローラー /コアロジックに関連するテストシナリオを使用してタグとスコープバインディングを実装することです。
各シナリオのスコープを下にドリルダウンして、実行前 /実行後に言及した下記のいずれか
BeforeTestRunScenario
BeforeFeature
BeforeScenario
BeforeScenarioBlock
BeforeStep
AfterStep
AfterScenarioBlock
AfterScenario
AfterFeature
AfterTestRunScenario
また、実装特有のステップ定義とともに実装と存在するDSLの使用を検討してください。たとえば、使用します
When I search for 'Barbados'
それ以外の
「検索フィールドに「バルバドス」を入力して検索ボタンを押すと
複数のステップ定義アセンブリを実装することにより、同じシナリオが異なるインターフェイスを介して実行できます。このアプローチを使用して、同じシナリオを使用してUI、APIなどをテストします。