web-dev-qa-db-fra.com

Erreur Specflow: Forcer la régénération des étapes possible?

Est-il possible de "forcer" la régénération des définitions d'étape pour un fichier de caractéristiques specflow? J'ai créé ce fichier de fonctionnalité mais je ne peux pas générer toutes les étapes. Je reçois un message m'informant que toutes les étapes sont déjà liées, mais lorsque je lance le test, j'obtiens une erreur indiquant que les mêmes étapes ne sont pas liées. J'ai tout effacé et recréé à la fois la définition des fonctions et des étapes, mais maintenant je ne peux pas générer TOUTES les étapes car specflow indique qu'elles sont déjà liées.

26
Ibexy I

SpecFlow crée un fichier .cache dans votre dossier Temp qui contient ces liaisons pour accélérer les choses. Si ce fichier se désorganise, vous pouvez le supprimer :

  1. Quittez Visual Studio.
  2. Ouvrez l'explorateur Windows.
  3. Dans la barre d'adresse, tapez% TEMP% et appuyez sur Entrée pour accéder à votre dossier temporaire.
  4. Recherchez les fichiers dont le nom commence par "specflow-stepmap-YourProjectName" avec une extension .cache.
  5. Supprimer ces fichiers.
  6. Relancez Visual Studio.

Si vous faites cela, SpecFlow mettra un peu de temps à régénérer les liaisons. Jusqu'à ce que cela soit fait, si vous cliquez avec le bouton droit de la souris sur une étape et que vous sélectionnez "Atteindre la définition de l'étape", Visual Studio répondra "Les liaisons des étapes sont toujours en cours d'analyse. Veuillez patienter."

Je l'utilise le plus souvent dans le cas contraire, où SpecFlow montre que rien est lié même si les étapes existent. Mais je pense que cela fonctionnera probablement aussi pour votre cas.

79
Ryan Lundy

Cliquez avec le bouton droit sur le fichier .feature et choisissez "Exécuter l'outil personnalisé". Cela relancera SpecFlowSingleFileGenerator qui génère le code-behind dans la structure de test de votre choix. 

12
Marcus Hammarberg
  • Fermer Visual Studio 
  • Ouvrez le fichier .csproj dans un éditeur de texte tel que Bloc-notes ++ 
  • En supposant que vous utilisez SpecFlow 2.2.0
  • En supposant que vos fonctionnalités sont dans ./Features 
  • Dans la zone <Project>, vous devriez voir quelques commandes <Import>, ajoutez ceci:

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

Insérez cet extrait juste à l'intérieur de la partie <Project></Project> de .csproj, à côté de l'autre <Import>s si vous le pouvez. La partie commentée est importante, elle régénérera les fichiers .feature.cs

  • Rouvrir Visual Studio
  • Chaque fois que vous construirez les fichiers .feature.cs seront renégociés
  • Vous voudrez peut-être ajouter *.feature.cs à votre .gitignore après cela
1
jmb-mage

Si vous rencontrez des problèmes avec les liaisons Specflow telles que:

  • les étapes ne sont pas reconnues
  • aucune liaison n'a pu être trouvée

et le redémarrage de Visual Studio ou la régénération des liaisons ne fonctionnant pas, SpecFlow Résolution des problèmes d'intégration à Visual Studio propose différentes solutions pour Visual Studio 2013 et 2015.

0
Ralph Willgoss

Le redémarrage de VS est fastidieux, surtout si vous avez un gros projet.

Nous avons modifié le code du plugin specflow ( https://github.com/techtalk/SpecFlow ) . Ajout de la commande qui réinitialise la portée (voir la méthode EnsureInitialization) et nettoie le fichier chached.

Maintenant, il suffit de cliquer sur le bouton lorsque les liaisons sont modifiées.

0
Munduz Subanov

Vous pouvez régénérer toutes les classes de test de fichiers de fonctions à l'aide de l'outil specflow.exe fourni par SpecFlow.

En supposant que SpecFlow a été installé via NuGet et se trouve dans le répertoire ./packages par rapport à votre répertoire actuel, vous pouvez exécuter, dans le terminal, la commande

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

qui va régénérer tous les tests unitaires de fichiers de caractéristiques. Comme l'indique la page liée, vous pouvez ajouter l'indicateur /force pour forcer la régénération de tous les tests.

0
Chris Midgley

Si vous utilisez le plugin SpecFlow dans Visual Studio , vous pouvez voir quelles lignes ont des liaisons, par opposition à celles qui ne le sont pas en raison de la mise en surbrillance. En outre, vous pouvez également appuyer sur la touche F12 pour accéder aux éléments dotés de liaisons, générer une liaison pouvant être collée là où elle n'existe pas.

Aussi, je n'ai pas vu ce processus de génération de toutes les étapes en une fois, comme décrit ci-dessus. Pour être honnête, cela semble un peu contre-intuitif, car SpecFlow contient déjà des conditions d’avertissement lorsque les étapes n'existent pas.

0
AlSki

J'ai rencontré le même problème. Le redémarrage de Visual Studio fera le travail - SpecFlow met les liaisons en cache quelque part. 

Cela ressemble à un bug pour moi. Il peut être reproduit en déplaçant la classe d'étape générée. Je crois que lorsque vous cliquez sur "Générer les définitions d'étape", le moteur accède au cache et ne vérifie pas le fichier réel.

Je teste cela sur Visual Sudio 2013 avec SpecFlow plugin dans un projet DLL simple et clair.

0
Ognyan Dimitrov

J'ai dû redémarrer VS et cela a fonctionné pour moi. Vous n'avez pas besoin de supprimer les fichiers temporaires ou quoi que ce soit d'autre. 

oui c'est un peu gênant mais le moindre de tous les maux je pense. 

0
Prime By Design