18

SpecFlowを使用してBDDスタイルのテストを行っています。私の機能のいくつかはUIテストなので、WatiNを使用します。一部はUIテストではないため、そうではありません。

StepDefinitions.cs現在、すべての機能をカバーする単一のファイルがあります。WatiNを初期化するBeforeScenarioステップがあります。これは、必要かどうかに関係なく、すべてのテストでInternetExplorerが起動することを意味します。

SpecFlowに、特定のステップ定義のセットに関連付けられた特定の機能ファイルを作成する方法はありますか?それとも私はこれに間違った角度からアプローチしていますか?

4

6 に答える 6

29

タグを使用する場合、問題に対する簡単な解決策があります。

特定の機能が次のような 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()
{
  ...
}

この BeforeScenario メソッドは、WatiN を使用する機能に対してのみ呼び出されます。

于 2010-06-14T15:17:20.727 に答える
15

現在 (SpecFlow 1.3 では) ステップ定義はグローバルであり、特定の機能に限定することはできません。

これは、Cucumber と同じ動作をするように設計されています。

きゅうりのグループで同じ質問をしました。

http://groups.google.com/group/cukes/browse_thread/thread/20cd7e1db0a4bdaf/fd668f7346984df9#fd668f7346984df9

ベースラインは、すべての機能ファイルによって定義される言語もグローバル (アプリケーション全体の 1 つのグローバルな動作) である必要があるということです。したがって、機能に対するスコープ定義は避ける必要があります。個人的に、私はまだこれについて完全に確信していません...

ただし、UI 統合が必要なシナリオでのみ WatiN を開始するという問題は、次の 2 つの方法で解決できます。

于 2010-06-03T06:59:45.453 に答える
8

これをチェックしてください (SpecFlow 1.4 の新機能): https://github.com/techtalk/SpecFlow/wiki/Scoped-Bindings

于 2010-10-08T14:05:52.867 に答える
3

私は当初、ステップ ファイルが特定の機能ファイルに関連付けられていると想定していました。これが真実ではないことに気付いた後、すべての SpecFlow コードと機能ファイルを改善するのに役立ちました。私の機能ファイルの言語はコンテキストに依存しなくなりました。その結果、ステップ定義がより再利用可能になり、コードの重複が少なくなりました。今では、どの機能のためのものではなく、一般的な類似性に従ってステップ ファイルを整理しています。私の知る限り、ステップを特定の機能に関連付ける方法はありませんが、私は SpecFlow の専門家ではないので、私の言葉を鵜呑みにしないでください。

ステップ ファイルを特定の機能ファイルに関連付けたい場合は、似たような名前を付けてください。ステップコードがその機能に対してのみ意味がある場合でも、その機能に対してのみ機能するように強制する必要はありません。これは、たまたま別の機能に対して重複するステップを作成した場合でも、あいまいな一致として検出されるためです。あいまいな一致の動作は、App.config ファイルで指定できます。 App.config ファイルの詳細については、http://cloud.github.com/downloads/techtalk/SpecFlow/SpecFlow%20Guide.pdfを参照 してください。デフォルトでは、あいまいな一致が検出され、エラーとして報告されます。

[編集]: 実際、この方法での作業には問題があります (機能ファイルに関連付けられたステップ ファイルを念頭に置いているだけです)。問題は、.feature ファイルを追加または変更し、以前に使用したのと同じ文言を使用し、ステップを追加するのを忘れたときに発生しますが、その文言のステップを以前に一度作成しているため、これに気づきません。 、そしてそれは文脈に敏感な方法で書かれました。また、ステップ ファイルを機能ファイルに関連付けないことの有用性についても、確信が持てなくなりました。ほとんどのクライアントは、コンテキストに依存しない方法で仕様を記述するのが得意ではないと思います。それは私たちが普通に書いたり、話したり、考えたりする方法ではありません。

于 2010-06-03T02:08:07.440 に答える
0

また、実装に依存しない DSL を実装固有のステップ定義と共に使用することも検討してください。たとえば、

When I search for 'Barbados'

それ以外の

「検索フィールドに「バルバドス」と入力して検索ボタンを押すと、

複数のステップ定義アセンブリを実装することにより、同じシナリオを異なるインターフェイスを介して実行できます。このアプローチを使用して、同じシナリオを使用して UI や API などをテストします。

于 2014-02-24T20:40:47.610 に答える