web-dev-qa-db-ja.com

Specflowエラー:ステップを強制的に再生成できますか?

Specflow機能ファイルのステップ定義を「強制」再生成することは可能ですか?この機能ファイルを作成しましたが、すべてのステップを生成できません。すべてのステップが既にバインドされているというメッセージが表示されますが、テストを実行すると、同じステップがバインドされていないというエラーが表示されます。すべてをクリアし、機能とステップの両方の定義を再作成しましたが、specflowがすでにバインドされていると言うため、すべてのステップをイベントで生成できません。

31
Ibexy I

SpecFlowはTempフォルダに.cacheファイルを作成しますこれらのバインディングを保持して処理を高速化します。そのファイルが破壊された場合、delete it

  1. Visual Studioを終了します。
  2. Windowsエクスプローラーを開きます。
  3. アドレスバーに「%TEMP%」と入力し、Enterキーを押して一時フォルダーに移動します。
  4. 「specflow-stepmap-YourProjectName」で始まり、拡張子が.cacheのファイルを見つけます。
  5. それらのファイルを削除します。
  6. Visual Studioを再度起動します。

これを行うと、SpecFlowがバインディングを再生成するのに少し時間がかかります。これが完了するまで、ステップを右クリックして「ステップ定義に移動」を選択すると、Visual Studioは「ステップバインディングはまだ分析中です。しばらくお待ちください」と応答します。

私は最も一般的にこれを逆の場合に使用します。SpecFlowは、ステップが存在してもnothingがバインドされていることを示します。しかし、あなたの場合にもうまくいくと思います。

89
Ryan Lundy
  • Visual Studioを閉じます
  • NotePad ++などのテキストエディタで.csprojを開きます。
  • SpecFlow 2.2.0を使用していると仮定します
  • 機能が./Featuresにあると仮定します
  • <Project>エリアには、いくつかの<Import>コマンドが表示されるはずです。これを追加します。
  <Import Project="..\packages\SpecFlow.2.2.0\tools\TechTalk.SpecFlow.targets" Condition="Exists('..\packages\SpecFlow.2.2.0\tools\TechTalk.SpecFlow.targets')" />
  <!--<ItemGroup>
    -->
  <!-- include all feature files from the folder "FeatureFiles" -->
  <!--
    <None Include="Features\**\*.feature" /> 
  </ItemGroup>
  <Target Name="AfterUpdateFeatureFilesInProject">
      -->
  <!-- include any files that specflow generated into the compilation of the project -->
  <!--
      <ItemGroup>
          <Compile Include="@(SpecFlowGeneratedFiles)" />
      </ItemGroup>
  </Target>-->

このスニペットを.csprojの<Project></Project>部分のすぐ内側に挿入し、可能であれば他の<Import>sの隣に挿入します。コメント部分は重要です。feature.csファイルを再生成します

  • Visual Studioを再度開きます
  • ビルドするたびに、.feature.csファイルが再生成されます
  • この後、*.feature.csを.gitignoreに追加することができます。
1
abbaf33f

私がだまされたことを確認するもう1つの方法は、保留中のプレースホルダーコードをそのままにしておくことです(opps):

ScenarioContext.Current.Pending();

テストに未実装のフラグを立てます。

0
Ben

次のようなSpecflowバインディングに問題がある場合:

  • ステップは認識されません
  • バインディングが見つかりませんでした

visual Studioの再起動またはバインディングの再生成が機能しない場合、SpecFlow Troubleshooting Visual Studio Integration にはVisual Studio 2013および2015用のさまざまなソリューションがあります。

0
Ralph Willgoss

VSの再起動は、特に大きなプロジェクトがある場合は面倒です。

Specflowプラグインのコードを変更しました( https://github.com/techtalk/SpecFlow )。スコープを再初期化するコマンド(メソッドEnsureInitializationを参照)を追加し、キャッシュファイルを消去します。

バインディングが変更されたら、ボタンをクリックするだけです。

0
Munduz Subanov

SpecFlowが提供するツール specflow.exe を使用して、すべての機能ファイルテストクラスを再生成できます。

SpecFlowがNuGetを介してインストールされ、./packages現在のディレクトリに相対的なディレクトリ、ターミナルでコマンドを実行できます

.\packages\SpecFlow.X.Y.Z\tools\specflow.exe generateall path\to\myfile.csproj

これにより、すべての機能ファイルの単体テストが再生成されます。リンクされたページの状態に応じて、/forceフラグは、すべてのテストの再生成を強制します。

0
Chris Midgley

Visual StudioのSpecFlowプラグイン を使用している場合、強調表示が原因ではないものとは対照的に、どの行がバインディングを持っているかを確認できます。さらに、F12キーを押して、バインドのあるアイテムに移動し、存在しない場所に貼り付けることができるバインドを生成することもできます。

また、上記で説明したように、すべてのステップを一度に生成するこのプロセスを見たことはありません。正直に言うと、SpecFlowには既にステップが存在しない場合の警告条件が既に具体的に設定されているため、直感に反するように思えます。

0
AlSki

同じ問題が発生しました。 Visual Studioを再起動するとジョブが完了します-SpecFlowはバインディングをどこかにキャッシュしています。

これは私にはバグのように見えます。生成されたステップクラスを移動することで再現できます。 「ステップ定義の生成」をクリックすると、エンジンがキャッシュにヒットし、実際のファイルをチェックしないと思います。

私はこれをVisual Sudio 2013で SpecFlowプラグイン で単純なdllプロジェクトでテストしています。

0
Ognyan Dimitrov

私はVSを再起動する必要があり、それは私のために働いた。一時ファイルなどを削除する必要はありませんでした。

ええ、それは少し不便ですが、私が思うすべての悪の少ないです。

0
Prime By Design