it-swarm.com.de

Specflow-Fehler: Erzwingen von Regenerierungsschritten möglich?

Ist es möglich, Schrittdefinitionen für eine Specflow-Feature-Datei zu "erzwingen"? Ich habe diese Feature-Datei erstellt, kann jedoch nicht alle Schritte generieren. Ich erhalte die Meldung, dass alle Schritte bereits gebunden sind, aber wenn ich den Test durchführe, wird die Fehlermeldung angezeigt, dass dieselben Schritte nicht gebunden sind. Ich habe alles gelöscht und sowohl die Feature- als auch die Schrittdefinition neu erstellt, aber jetzt kann ich nicht ALLE Schritte generieren, da specflow sagt, dass sie bereits gebunden sind.

26
Ibexy I

SpecFlow erstellt eine .cache-Datei in Ihrem Temp-Ordner , die diese Bindungen enthält, um die Abläufe zu beschleunigen. Wenn diese Datei aus dem Ruder läuft, können Sie löschen :

  1. Beenden Sie Visual Studio.
  2. Öffnen Sie den Windows Explorer.
  3. Geben Sie in die Adressleiste% TEMP% ein und drücken Sie die Eingabetaste, um zu Ihrem temporären Ordner zu gelangen.
  4. Suchen Sie die Dateien, deren Namen mit "specflow-stepmap-YourProjectName" beginnen, mit der Erweiterung .cache.
  5. Löschen Sie diese Dateien.
  6. Starten Sie Visual Studio erneut.

Wenn Sie dies tun, dauert es einige Zeit, bis SpecFlow die Bindungen neu erstellt. Bis dies geschehen ist, wenn Sie mit der rechten Maustaste auf einen Schritt klicken und "Gehe zu Schrittdefinition" auswählen, antwortet Visual Studio "Schrittbindungen werden noch analysiert. Bitte warten Sie."

Ich verwende dies am häufigsten für den umgekehrten Fall, wo SpecFlow zeigt, dass nothing gebunden ist, obwohl die Schritte vorhanden sind. Aber ich denke, es wird wahrscheinlich auch für Ihren Fall funktionieren.

79
Ryan Lundy

Klicken Sie mit der rechten Maustaste auf die .feature-Datei und wählen Sie "Benutzerdefiniertes Werkzeug ausführen". Dadurch wird der SpecFlowSingleFileGenerator erneut ausgeführt, der den Code-Behind im Testframework Ihrer Wahl generiert. 

12
  • Schließen Sie Visual Studio 
  • Öffnen Sie die .csproj in einem Texteditor wie NotePad ++ 
  • Angenommen, Sie verwenden SpecFlow 2.2.0
  • Angenommen, Ihre Funktionen sind in ./Features 
  • Im Bereich <Project> sollten Sie einige <Import>-Befehle sehen. Fügen Sie Folgendes hinzu:

  <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>-->

Fügen Sie dieses Snippet genau in den <Project></Project>-Teil von .csproj ein, neben den anderen <Import>s, wenn Sie können. Der kommentierte Teil ist wichtig, er generiert die .feature.cs-Dateien neu

  • Öffnen Sie Visual Studio erneut
  • Bei jedem Build werden die .feature.cs-Dateien neu bewertet
  • Sie können danach *.feature.cs zu Ihrem .gitignore hinzufügen
1
jmb-mage

Eine andere Möglichkeit, um zu überprüfen, ob ich mich getäuscht habe, ist, dass Sie den ausstehenden Platzhaltercode an Ort und Stelle gelassen haben (opps):

ScenarioContext.Current.Pending();

markiert den Test als nicht implementiert.

0
Ben

Wenn Sie Probleme mit Specflow-Bindungen hatten, z.

  • schritte werden nicht erkannt
  • es konnten keine Bindungen gefunden werden

wenn Sie Visual Studio neu starten oder die Bindungen neu erstellen, funktioniert dies nicht. Anschließend bietet SpecFlow Troubleshooting Visual Studio Integration verschiedene Lösungen für Visual Studio 2013 und 2015.

0
Ralph Willgoss

Der Neustart von VS ist umständlich, insbesondere wenn Sie ein großes Projekt haben.

Wir haben den Code des Specflow-Plugins geändert ( https://github.com/techtalk/SpecFlow ) . Ein neuer Befehl wurde hinzugefügt, der den Gültigkeitsbereich neu initialisiert (siehe Methode EnsureInitialization) und die gelöschte Datei bereinigt.

Jetzt klicken wir einfach auf die Schaltfläche, wenn Bindungen geändert werden.

0
Munduz Subanov

Sie können alle Feature-Datei-Testklassen mithilfe des von SpecFlow bereitgestellten Tools specflow.exe neu generieren.

Wenn SpecFlow über NuGet installiert wurde und sich im Verzeichnis ./packages relativ zu Ihrem aktuellen Verzeichnis befindet, können Sie den Befehl im Terminal ausführen

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

dadurch werden alle Feature-File-Unit-Tests neu generiert. Da die verknüpften Seitenstatus haben, können Sie das Flag /force hinzufügen, um die Regeneration aller Tests zu erzwingen.

0
Chris Midgley

Wenn Sie das SpecFlow-Plugin in Visual Studio verwenden, können Sie sehen, welche Zeilen Bindungen haben, im Gegensatz zu denen, die aufgrund der Hervorhebung nicht funktionieren. Darüber hinaus können Sie auch die Taste F12 drücken, um zu den Elementen zu gelangen, die über Bindungen verfügen. Sie können eine Bindung erstellen, die in eine nicht vorhandene Position eingefügt werden kann.

Ich habe diesen Prozess des Generierens aller Schritte nicht in einem Schritt gesehen, wie Sie oben beschrieben haben. Um ehrlich zu sein, scheint es ein wenig intuitiv zu sein, da SpecFlow bereits spezielle Warnbedingungen hat, wenn die Schritte nicht vorhanden sind.

0
AlSki

Ich bin auf das gleiche Problem gestoßen. Durch den Neustart von Visual Studio wird der Job erledigt. SpecFlow speichert die Bindungen irgendwo zwischen. 

Das sieht für mich nach einem Fehler aus. Es kann reproduziert werden, indem die generierte Schrittklasse verschoben wird. Ich glaube, dass, wenn Sie auf "Generate Step Definitions" klicken, die Engine den Cache erreicht und nicht nach der tatsächlichen Datei sucht.

Ich teste dies auf Visual Sudio 2013 mit SpecFlow-Plugin in einem einfachen einfachen DLL-Projekt.

0
Ognyan Dimitrov

Ich musste VS neu starten und es funktionierte für mich. Muß keine temporären Dateien oder irgendetwas anderes löschen. 

ja, es ist ein wenig unbequem, aber das geringere Übel denke ich. 

0
Prime By Design