2013-06-18 52 views
22

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

+1

请将正确的答案标记为已解决... Marcus的答案完全符合您要求的 – Heliac

+0

@Heliac,有时甚至重新运行自定义工具也无法解决问题。我在下面提供了一个备用,更可靠的解决方案。 –

回答

0

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

另外我还没有看到这个过程如上所述一次性生成所有步骤。说实话,这似乎有点反直觉,因为SpecFlow已经具体警告条件,当步骤不存在。

11

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

+1

SpecFlow(1.9.0)的最新版本似乎也检测到过时的代码生成并询问您是否要重新生成,这很好! –

+0

我试过了 - 如果后面的代码移动到上层文件夹中,则没有任何反应。 (带SpecFlow插件和SpecFlow 1.9.0.7的Visual Studio 2013)。我认为某种错误。重新启动VS帮助。 –

+2

没有工作。我的问题是绑定缓存是值得信赖的来源,但是是错误的。必须按照Kyralessa的6个步骤删除缓存。 –

0

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

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

我在一个简单的dll项目中使用SpecFlow plugin在Visual Sudio 2013上测试了这个。

66

SpecFlow在Temp文件夹中创建一个.cache文件,该文件保存这些绑定以加快速度。如果该文件变得不正常了,你可以删除

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

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

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

+0

我会在下次尝试:-) – Heliac

+0

+1清除缓存工程很好 –

+1

这应该是被接受的答案 – jolySoft

-1

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

我们更改了specflow插件的代码(https://github.com/techtalk/SpecFlow)。 添加了重新启动作用域的命令(请参阅方法EnsureInitialization)并清除chached文件。

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

+0

这个增强功能是发布还是将会是? – SayusiAndo

0

如果你一直有与Specflow绑定的问题,例如:

  • 步骤并不认可
  • 没有绑定可以发现

并重新启动Visual Studio或再生的绑定不起作用,那么SpecFlow Troubleshooting Visual Studio Integration针对Visual Studio 2013和2015具有各种解决方案。

0
  • 关闭Visual Studio的
  • 在打开记事本等++
  • 一个文本编辑器中的.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的
  • 每次你建立的文件将被renegerated
  • 的.feature.cs您可能需要添加*.feature.cs此后
0

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

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

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

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