如何使用MSBuild生成Specflow Feature.cs文件?

4
我正在尝试将SpecFlow与CI一起使用,但是将生成的.cs文件检入源代码控制似乎是错误的做法。
我尝试编辑.csproj文件,将<BeforeBuild>True</BeforeBuild>设置在feature.cs文件的Compile步骤中,但似乎没有任何变化。我发现重新生成.feature.cs文件的唯一方法是使用Visual Studio,但我想在CI构建服务器上使用MSBuild。
我还尝试按specflow doc中描述的添加AfterUpdateFeatureFilesInProject目标,但即使在.csproj文件中包含.feature.cs文件或不包含.feature.cs文件,也无法创建.feature.cs文件。

(这个问题建议阅读MSDN上的“指定自定义构建工具”,但我没有看到任何有用的信息。 关于MSDN上msbuild的模式定义甚至没有提及Compile元素,就我所知。)

2个回答

2
我按照 http://specflow.org/documentation/Generate-Tests-from-MsBuild/ 的说明操作,但是有一些步骤缺失。
  1. 将 SpecFlowTasksPath 属性设置为 specflow.exe 文件的位置。
  2. 导入 TechTalk.SpecFlow.tasks。
  3. 导入 TechTalk.SpecFlow.targets。

这些路径应该是相对路径,我的指向 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>

1

啊,是的,我忘了提到我已经看过那个页面了,但它没有任何效果;我会更新我的问题。 - danio
好的,有点奇怪。这应该是可以的。我在多个项目和SpecFlow本身中都做过多次。请参见此处:https://github.com/techtalk/SpecFlow/blob/master/Tests/TechTalk.SpecFlow.Specs/TechTalk.SpecFlow.Specs.csproj#L206 - Andreas Willich
重要的是这里的<Import>:https://github.com/techtalk/SpecFlow/blob/master/Tests/TechTalk.SpecFlow.Specs/TechTalk.SpecFlow.Specs.csproj#L195 - Andreas Willich
我尝试添加了该导入语句,但仍然无法生成 .cs 文件。这似乎不仅仅是按照文档所述“只需在项目文件末尾添加一行”的问题!我会查看您的 GitHub,看看它与我的项目有何不同。 - danio
1
请注意,上面的链接指向@AndreasWillich存储库的主分支,并且在添加其他提交后,行号已经偏移。正如他所说,您要查找<Import>行,特别是导入echTalk.SpecFlow.tasks和echTalk.SpecFlow.targets的行。我发现还有一些额外的步骤,请参见我的答案。 - Dude0001

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接