Specflow機能ファイルのステップ定義を「強制」再生成することは可能ですか?この機能ファイルを作成しましたが、すべてのステップを生成できません。すべてのステップが既にバインドされているというメッセージが表示されますが、テストを実行すると、同じステップがバインドされていないというエラーが表示されます。すべてをクリアし、機能とステップの両方の定義を再作成しましたが、specflowがすでにバインドされていると言うため、すべてのステップをイベントで生成できません。
SpecFlowはTempフォルダに.cacheファイルを作成しますこれらのバインディングを保持して処理を高速化します。そのファイルが破壊された場合、delete it:
これを行うと、SpecFlowがバインディングを再生成するのに少し時間がかかります。これが完了するまで、ステップを右クリックして「ステップ定義に移動」を選択すると、Visual Studioは「ステップバインディングはまだ分析中です。しばらくお待ちください」と応答します。
私は最も一般的にこれを逆の場合に使用します。SpecFlowは、ステップが存在してもnothingがバインドされていることを示します。しかし、あなたの場合にもうまくいくと思います。
<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ファイルを再生成します
*.feature.cs
を.gitignoreに追加することができます。私がだまされたことを確認するもう1つの方法は、保留中のプレースホルダーコードをそのままにしておくことです(opps):
ScenarioContext.Current.Pending();
テストに未実装のフラグを立てます。
次のようなSpecflowバインディングに問題がある場合:
visual Studioの再起動またはバインディングの再生成が機能しない場合、SpecFlow Troubleshooting Visual Studio Integration にはVisual Studio 2013および2015用のさまざまなソリューションがあります。
VSの再起動は、特に大きなプロジェクトがある場合は面倒です。
Specflowプラグインのコードを変更しました( https://github.com/techtalk/SpecFlow )。スコープを再初期化するコマンド(メソッドEnsureInitializationを参照)を追加し、キャッシュファイルを消去します。
バインディングが変更されたら、ボタンをクリックするだけです。
SpecFlowが提供するツール specflow.exe を使用して、すべての機能ファイルテストクラスを再生成できます。
SpecFlowがNuGetを介してインストールされ、./packages
現在のディレクトリに相対的なディレクトリ、ターミナルでコマンドを実行できます
.\packages\SpecFlow.X.Y.Z\tools\specflow.exe generateall path\to\myfile.csproj
これにより、すべての機能ファイルの単体テストが再生成されます。リンクされたページの状態に応じて、/force
フラグは、すべてのテストの再生成を強制します。
Visual StudioのSpecFlowプラグイン を使用している場合、強調表示が原因ではないものとは対照的に、どの行がバインディングを持っているかを確認できます。さらに、F12キーを押して、バインドのあるアイテムに移動し、存在しない場所に貼り付けることができるバインドを生成することもできます。
また、上記で説明したように、すべてのステップを一度に生成するこのプロセスを見たことはありません。正直に言うと、SpecFlowには既にステップが存在しない場合の警告条件が既に具体的に設定されているため、直感に反するように思えます。
同じ問題が発生しました。 Visual Studioを再起動するとジョブが完了します-SpecFlowはバインディングをどこかにキャッシュしています。
これは私にはバグのように見えます。生成されたステップクラスを移動することで再現できます。 「ステップ定義の生成」をクリックすると、エンジンがキャッシュにヒットし、実際のファイルをチェックしないと思います。
私はこれをVisual Sudio 2013で SpecFlowプラグイン で単純なdllプロジェクトでテストしています。
私はVSを再起動する必要があり、それは私のために働いた。一時ファイルなどを削除する必要はありませんでした。
ええ、それは少し不便ですが、私が思うすべての悪の少ないです。