Specflow error:强制重新生成步骤?

问题描述 投票:29回答:10

是否可以“强制”为specflow功能文件重新生成步骤定义?我创建了此功能文件,但无法生成所有步骤。我收到一条消息,说明所有步骤已经绑定但是当我运行测试时,我得到一个错误,相同的步骤没有绑定。我已经清除了所有内容并重新创建了功能和步骤定义,但现在我无法生成所有步骤,因为specflow表示它们已被绑定。

specflow
10个回答
87
投票

SpecFlow在Temp文件夹中创建一个.cache文件,该文件包含这些绑定以加快速度。如果该文件失败,您可以将其删除:

  1. 退出Visual Studio。
  2. 打开Windows资源管理器
  3. 在地址栏中,键入%TEMP%并按Enter键转到临时文件夹。
  4. 查找名称以“specflow-stepmap-YourProjectName”开头且扩展名为.cache的文件。
  5. 删除这些文件。
  6. 再次启动Visual Studio。

如果这样做,SpecFlow需要一点时间来重新生成绑定。在此之前,如果右键单击某个步骤并选择“转到步骤定义”,Visual Studio将回复“步骤绑定仍在分析中。请稍候”。

我最常用于相反的情况,其中SpecFlow显示即使存在步骤也没有任何约束。但我认为它也可能适合你的情况。


0
投票

另一个检查愚弄我的是你让待处理的占位符代码到位(opps):

/force

将测试标记为未实现。


12
投票

右键单击.feature文件,然后选择“运行自定义工具”。这将重新运行SpecFlowSingleFileGenerator,它会在您选择的测试框架中生成代码隐藏。


1
投票
  • 关闭Visual Studio
  • 在NotePad ++等文本编辑器中打开.csproj
  • 假设您使用的是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>-->

如果可以的话,将此片段插入到.csproj的<Project></Project>部分内,旁边是其他<Import>s。注释部分很重要,它将重新生成.feature.cs文件

  • 重新打开Visual Studio
  • 每次构建.feature.cs文件时都会被重新编译
  • 在此之后,您可能希望将*.feature.cs添加到.gitignore

0
投票

如果您使用的是SpecFlow plugin in Visual Studio,则可以看到哪些行具有绑定,而不是由于突出显示而没有绑定的行。此外,您还可以按F12转到具有Bindings的项目,生成可以粘贴在不存在的位置的绑定。

另外,我没有看到如上所述的一次性生成所有步骤的过程。说实话,这似乎有点反直觉,因为SpecFlow已经特别具有警告条件,以确定何时不存在这些步骤。


0
投票

我遇到了同样的问题。重新启动Visual Studio将完成工作 - SpecFlow正在某处缓存绑定。

对我来说这看起来像个错误。可以通过移动生成的步骤类来复制它。我相信当您单击“生成步骤定义”时,引擎会点击缓存并且不会检查实际文件。

我在一个简单的简单dll项目中使用qazxsw poi在Visual Studio 2013上测试它。


0
投票

重启VS很麻烦,特别是如果你有大项目。

我们更改了specflow插件的代码(SpecFlow plugin)。添加了重新初始化范围的命令(请参阅方法EnsureInitialization)并清除chached文件。

现在我们只需在更改绑定时单击按钮。


0
投票

如果您遇到Specflow绑定问题,例如:

  • 步骤无法识别
  • 没有绑定可以找到

并重新启动Visual Studio或重新生成绑定不起作用,然后SpecFlow https://github.com/techtalk/SpecFlow为Visual Studio 2013和2015提供了各种解决方案。


0
投票

您可以使用SpecFlow提供的工具Troubleshooting Visual Studio Integration重新生成所有要素文件测试类。

假设SpecFlow已经通过NuGet安装并且位于相对于当前目录的specflow.exe目录中,您可以在终端中运行命令

./packages

这将重新生成所有要素文件单元测试。如链接页面所述,您可以添加.\packages\SpecFlow.X.Y.Z\tools\specflow.exe generateall path\to\myfile.csproj 标志以强制重新生成所有测试。


0
投票

我不得不重启VS,它对我有用。不需要删除任何临时文件或其他任何东西。

是的,它有点不方便,但我想的所有邪恶中的较小者。

© www.soinside.com 2019 - 2024. All rights reserved.