Как сгенерировать файлы specflow feature.cs с помощью msbuild?

Я пытаюсь использовать specflow с CI, и кажется неправильным проверять сгенерированные файлы .cs в системе управления версиями.

Я попытался отредактировать файл .csproj, чтобы установить <BeforeBuild>True</BeforeBuild> на шаге Compile для файла feature.cs, но, похоже, это не имеет значения. Единственный способ восстановить файл .feature.cs — это использовать Visual Studio, но я хочу использовать msbuild на сервере сборки CI.

Я также попытался добавить цель AfterUpdateFeatureFilesInProject, как описано в specflow doc, но это также не создавал файлы .feature.cs ни с файлами .feature.cs, ни без них в файле .csproj.

(Этот вопрос предлагает прочитать "Specifying Custom Build Tools" в MSDN, но я не нашел там ничего полезного. определение схемы для msbuild в MSDN даже не упоминает элемент Compile AFAICT.)


person danio    schedule 27.02.2017    source источник


Ответы (2)


Я следовал инструкциям на http://specflow.org/documentation/Generate-Tests-from-MsBuild/, но некоторые шаги отсутствуют.

  1. Задайте для свойства SpecFlowTasksPath расположение specflow.exe.
  2. Импорт TechTalk.SpecFlow.tasks
  3. Импорт целей TechTalk.SpecFlow.

Эти пути должны быть относительными путями, мои указывают на папку NuGet packages\, где я ссылаюсь на SpecFlow для своего проекта.

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

  <PropertyGroup>
    <SpecFlowTasksPath>..\packages\SpecFlow.2.2.0\tools\specflow.exe</SpecFlowTasksPath>
  </PropertyGroup>
  <Import Project="..\packages\SpecFlow.2.2.0\tools\TechTalk.SpecFlow.tasks"  Condition="Exists('..\packages\SpecFlow.2.2.0\tools\TechTalk.SpecFlow.tasks')" />
  <Import Project="..\packages\SpecFlow.2.2.0\tools\TechTalk.SpecFlow.targets" Condition="Exists('..\packages\SpecFlow.2.2.0\tools\TechTalk.SpecFlow.targets')" />
  <Target Name="AfterUpdateFeatureFilesInProject">
    <Move SourceFiles="@(SpecFlowGeneratedFiles)" DestinationFolder="Features.Generated" OverwriteReadOnlyFiles="true" />
    <ItemGroup>
      <!-- include any files that specflow generated into the compilation of the project -->
      <Compile Include="Features.Generated\**\*.cs">
        <Visible>true</Visible>
        <!-- the generated files can be hidden in Visual Studio -->
      </Compile>
    </ItemGroup>
  </Target>
person Dude0001    schedule 14.12.2017

Вы можете найти документацию по созданию файлов кода с помощью MSBuild здесь: http://specflow.org/documentation/Generate-Tests-from-MsBuild/

person Andreas Willich    schedule 27.02.2017
comment
Ах, да, я забыл упомянуть, что просматривал эту страницу, но это не имело никакого эффекта; Я обновлю свой вопрос. - person danio; 27.02.2017
comment
Хорошо, странно. Это должно сработать. Я делал это несколько раз в разных проектах и ​​в самой SpecFlow. См. здесь: github.com/techtalk/SpecFlow/blob/master/Tests/ - person Andreas Willich; 28.02.2017
comment
Важным является «Импорт» здесь: github.com/techtalk/SpecFlow/blob/master/Tests/ - person Andreas Willich; 28.02.2017
comment
Я попытался добавить импорт, и он по-прежнему не генерирует файлы .cs, похоже, это немного больше, чем добавить только одну строку в конец файла проекта, как указано в документе! Я возьму ваш github и посмотрю, чем он отличается от моего проекта. - person danio; 28.02.2017
comment
К вашему сведению, приведенные выше ссылки указывают на основную ветку репозитория @AndreasWillich, а номера строк отключены после дополнительных коммитов. Как он говорит, вы ищете строки «Импорт», особенно те, которые импортируют echTalk.SpecFlow.tasks и echTalk.SpecFlow.targets. Я обнаружил, что есть еще несколько дополнительных шагов, см. Мой ответ. - person Dude0001; 14.12.2017