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

时间:2013-06-18 11:35:13

标签: specflow

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

10 个答案:

答案 0 :(得分:84)

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

  1. 退出Visual Studio。
  2. 打开Windows资源管理器。
  3. 在地址栏中,键入%TEMP%并按Enter键转到临时文件夹。
  4. 找到名称以“specflow-stepmap-YourProjectName”开头且扩展名为.cache的文件。
  5. 删除这些文件。
  6. 再次启动Visual Studio。
  7. 如果这样做,SpecFlow需要一点时间来重新生成绑定。在此之前,如果右键单击某个步骤并选择“转到步骤定义”,Visual Studio将回复“步骤绑定仍在分析中。请稍候。”

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

答案 1 :(得分:12)

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

答案 2 :(得分:1)

  • 关闭Visual Studio
  • 在NotePad ++
  • 等文本编辑器中打开.csproj
  • 假设您使用的是SpecFlow 2.2.0
  • 假设您的功能位于./Features
  • <Project>区域,您应该会看到一些<Import>命令,请添加:

&#13;
&#13;
  <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>-->
&#13;
&#13;
&#13;

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

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

答案 3 :(得分:0)

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

此外,我还没有看到如上所述的一次性生成所有步骤的过程。说实话,这似乎有点违反直觉,因为SpecFlow已经明确地指出了步骤不存在的警告条件。

答案 4 :(得分:0)

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

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

我在Visual Sudio 2013上使用SpecFlow plugin在简单的简单dll项目中对此进行测试。

答案 5 :(得分:0)

重启VS非常麻烦,特别是如果你有大项目的话。

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

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

答案 6 :(得分:0)

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

  • 无法识别步骤
  • 找不到任何绑定

并重新启动Visual Studio或重新生成绑定不起作用,然后SpecFlow Troubleshooting Visual Studio Integration为Visual Studio 2013和2015提供了各种解决方案。

答案 7 :(得分:0)

您可以使用SpecFlow提供的工具specflow.exe重新生成所有要素文件测试类。

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

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

将重新生成所有要素文件单元测试。如链接页面所述,您可以添加/force标志以强制重新生成所有测试。

答案 8 :(得分:0)

我不得不重启VS,它为我工作了。不需要删除任何临时文件或其他任何文件。

是的,这有点不方便,但我认为所有弊端都较小。

答案 9 :(得分:0)

我遇到了一个问题,那就是没有更新功能文件的设计器文件。通过执行以下变通办法,我能够解决此问题,现在我的功能文件设计器正在更新。 工具-> SpecFlow->常规->并启用specflow单个文件生成器。

Specflow版本-2.2.1 Visual Studio 2017和2019