Подтвердить что ты не робот

Ошибка Specflow: возможно ли выполнить шаги регенерации?

Можно ли "принудительно" регенерировать определения шага для файла функций specflow? Я создал этот файл функций, но не могу сгенерировать все этапы. Получаю сообщение о том, что все шаги уже связаны, но когда я запускаю тест, я получаю сообщение об ошибке, что те же шаги не связаны. Я очистил все и воссоздал определение функции и шага, но теперь я не могу генерировать ВСЕ шаги, потому что specflow говорит, что они уже связаны.

4b9b3361

Ответ 1

SpecFlow создает файл .cache в вашей папке Temp, которая содержит эти привязки для ускорения работы. Если этот файл выходит из строя, вы можете удалить его:

  • Выйти из Visual Studio.
  • Откройте проводник Windows.
  • В адресной строке введите% TEMP% и нажмите Enter, чтобы перейти в вашу временную папку.
  • Найдите файлы, имена которых начинаются с "specflow-stepmap-YourProjectName" с расширением .cache.
  • Удалить эти файлы.
  • Запустите Visual Studio еще раз.

Если вы это сделаете, потребуется некоторое время, чтобы SpecFlow восстановил привязки. Пока это не будет сделано, если вы щелкните правой кнопкой мыши на шаге и выберите "Перейти к определению шага", Visual Studio ответит: "Шаговые привязки все еще анализируются. Пожалуйста, подождите".

Я чаще всего использую это для противоположного случая, где SpecFlow показывает, что ничто не связано, хотя этапы существуют. Но я думаю, что это, скорее всего, будет работать и для вашего дела.

Ответ 2

Щелкните правой кнопкой мыши файл .feature и выберите "Запустить пользовательский инструмент". Это приведет к повторному запуску SpecFlowSingleFileGenerator, который генерирует код в структуре тестирования по вашему выбору.

Ответ 3

Если вы используете плагин SpecFlow в Visual Studio, вы можете видеть, какие строки имеют привязки, а не те, которые не подлежат к подсветке. Кроме того, вы также можете нажать F12, чтобы перейти к элементам, имеющим Bindings, создать привязку, которая может быть вставлена ​​там, где она не существует.

Также я не видел этот процесс генерации всех шагов за один раз, как описано выше. Честно говоря, это выглядит немного интуитивно понятным, поскольку SpecFlow уже имеет определенные условия предупреждения, когда этапы не существуют.

Ответ 4

Я столкнулся с той же проблемой. Перезапуск Visual Studio выполнит эту работу - SpecFlow кэширует привязки где-то.

Это выглядит как ошибка для меня. Его можно воспроизвести, перемещая порожденный класс шагов. Я считаю, что когда вы нажимаете "Объединить определения шага", движок попадает в кеш и не проверяет фактический файл.

Я тестирую это на Visual Sudio 2013 с плагин SpecFlow в простой простой проект dll.

Ответ 5

Если у вас возникли проблемы с привязками к Specflow, например:

  • шаги не распознаются
  • не удалось найти привязки

и перезапуск Visual Studio или восстановление привязок не работает, тогда SpecFlow Устранение неполадок интеграции Visual Studio имеет различные решения для Visual Studio 2013 и 2015.

Ответ 6

  • Закрыть Visual Studio
  • Откройте .csproj в текстовом редакторе, таком как NotePad ++
  • Предполагая, что вы используете 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>-->

Ответ 7

Вы можете регенерировать все тестовые классы файлов свойств с помощью инструмента, предоставленного SpecFlow specflow.exe.

Предполагая, что SpecFlow был установлен через NuGet и находится в каталоге ./packages относительно вашего текущего каталога, вы можете запустить в терминале команду

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

который будет регенерировать все тесты модульных файлов. Как указано в связанной странице, вы можете добавить флаг /force, чтобы принудительно восстановить все тесты.

Ответ 8

Перезапуск VS громоздкий, особенно если у вас большой проект.

Мы изменили код плагина плагина (https://github.com/techtalk/SpecFlow). Добавлена ​​команда, которая повторно инициализирует область действия (см. Метод EnsureInitialization) и очищает файл chached.

Теперь мы просто нажимаем кнопку при изменении привязок.