是否可以“强制”为 specflow 功能文件重新生成步骤定义?我已创建此功能文件,但无法生成所有步骤。我收到一条消息,所有步骤都已绑定,但是当我运行测试时,我收到一个错误,指出相同的步骤未绑定。我已经清除了所有内容并重新创建了功能和步骤定义,但现在我无法事件生成所有步骤,因为 specflow 说它们已经绑定。
11 回答
SpecFlow 在您的 Temp 文件夹中创建一个 .cache 文件,其中包含这些绑定以加快速度。如果该文件不正常,您可以将其删除:
- 退出 Visual Studio。
- 打开 Windows 资源管理器。
- 在地址栏中,键入 %TEMP% 并按 Enter 进入您的临时文件夹。
- 查找名称以“specflow-stepmap-YourProjectName”开头且扩展名为 .cache 的文件。
- 删除那些文件。
- 再次启动 Visual Studio。
如果您这样做,SpecFlow 将需要一些时间来重新生成绑定。在此完成之前,如果您右键单击某个步骤并选择“转到步骤定义”,Visual Studio 将回复“步骤绑定仍在分析中。请稍候。”
我最常将其用于相反的情况,其中 SpecFlow 显示即使存在步骤也没有任何约束。但我认为它也可能适用于您的情况。
右键单击 .feature 文件并选择“运行自定义工具”。这将重新运行在您选择的测试框架中生成代码隐藏的 SpecFlowSingleFileGenerator。
您可以使用 SpecFlow 提供的工具specflow.exe重新生成所有功能文件测试类。
假设 SpecFlow 已经通过 NuGet 安装并且在./packages
相对于您当前目录的目录中,您可以在终端中运行命令
.\packages\SpecFlow.X.Y.Z\tools\specflow.exe generateall path\to\myfile.csproj
这将重新生成所有功能文件单元测试。如链接页面所述,您可以添加/force
标志以强制重新生成所有测试。
- 关闭 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>
,在其他 s 旁边。<Import>
注释部分很重要,它将重新生成 .feature.cs 文件
- 重新打开 Visual Studio
- 每次构建 .feature.cs 文件时都会重新生成
- 您可能希望
*.feature.cs
在此之后添加到您的 .gitignore
如果您在 Visual Studio 中使用 SpecFlow 插件,您可以看到哪些行具有绑定,而不是由于突出显示而没有绑定的行。另外你也可以按F12进入有Bindings的项目,在不存在的地方生成一个可以粘贴的绑定。
此外,我还没有看到像您上面描述的那样一次性生成所有步骤的过程。老实说,这似乎有点违反直觉,因为 SpecFlow 已经专门针对不存在步骤的情况提供了警告条件。
重新启动 VS 很麻烦,特别是如果您有大项目。
我们更改了 specflow 插件 ( https://github.com/techtalk/SpecFlow ) 的代码。添加了重新初始化范围的命令(请参阅方法 EnsureInitialization)并清理 chached 文件。
现在我们只需在绑定更改时单击按钮。
我遇到了同样的问题。重新启动 Visual Studio 将完成工作 - SpecFlow 正在某处缓存绑定。
这对我来说似乎是一个错误。它可以通过移动生成的步骤类来重现。我相信当您单击“生成步骤定义”时,引擎会命中缓存并且不会检查实际文件。
我在一个简单的 dll 项目中使用SpecFlow 插件在 Visual Sudio 2013 上对此进行测试。
如果您在使用 Specflow 绑定时遇到问题,例如:
- 无法识别步骤
- 找不到绑定
并且重新启动 Visual Studio 或重新生成绑定不起作用,那么 SpecFlow Troubleshooting Visual Studio Integration有适用于 Visual Studio 2013 和 2015 的各种解决方案。
我不得不重新启动VS,它对我有用。不需要删除任何临时文件或其他任何东西。
是的,这有点不方便,但我认为是万恶之源。
我遇到了一个问题,即没有更新功能文件的设计器文件。通过执行以下解决方法,我能够解决该问题,现在我的功能文件设计器正在更新。工具 -> SpecFlow -> 常规 -> 并启用了 specflow 单文件生成器。
Specflow 版本 - 2.2.1 Visual Studio 2017 和 2019
另一个检查是否愚弄了我的是您是否将待处理的占位符代码留在原处(opps):
ScenarioContext.Current.Pending();
会将测试标记为未实施。