我无法获取文件背后的 specflow 代码以重新生成

I cannot get specflow's code behind files to regenerate

当我编辑 specflow 功能文件测试时,它不会更新代码隐藏文件。 当我尝试通过右键单击项目并选择 'Regenerate Feature Files' 来手动重新生成代码隐藏文件时,出现错误:

Error: cannot find custom tool 'specflowsinglefilegenerator' on this system

我发现这通常意味着我没有安装 Specflow 扩展。但是,当我查看 Visual studio 中的扩展和更新时,我可以看到 'Specflow for Visual Studio 2017' 已安装。

如果有人知道我能做什么,那将非常有帮助。 当我将存储库重新克隆到一个新文件夹时,这就开始了。

我也试过清理和重建。关闭 visual studio。卸载并重新安装 Specflow 扩展。从 2019 年 visual studio 切换到 2017 年。重新启动我的计算机。更新规范流。删除 specflow 缓存文件并强制重新生成文件。 我仍然没有对代码隐藏文件进行任何更改。

在 Visual studio 中,我选择了:工具 > 选项 > Specflow。 然后将启用 SpecFlowSingleFileGenerator 自定义工具设置为 True。

但是,这是一个旧设置,我想尝试找到一种使用 MSBuild 的方法。

我遇到了同样的问题。当我将我的 specflow 升级到 3.0.213 时, feature.cs 并且没有生成测试。然后我使用 this MSBUild 示例和最新的 specflow 生成 feature.cs 并在测试资源管理器中进行测试。它使用 MSTest 作为测试运行器。

这些是我必须采取的步骤,以便从使用旧的 'specflowsinglefilegenerator' 生成我的 *.feature.cs 文件切换到在我构建测试项目时让它们自动更新。

过程在Specflow's website上有描述,但图片有助于理解过程。

  1. 从所有 *.feature 文件中删除 'specflowsinglefilegenerator' 自定义工具参考(之前...) (After...)
  2. 删除当前*.feature.cs 对应于您的*.feature 文件的文件
  3. 至少将 Specflow 升级到 3.0.188。以下是为我工作。我正在使用 NUnit 作为我的测试框架。 MS 测试资源管理器需要 NUnit3TestAdapter 来识别测试。 (下面必须具备的是:NUnit、NUnit3TestAdapter、Specflow、Selenium.Webdriver)、Selenium.Support、
  4. 将 SpecFlow.Tools.MsBuild.Generation NuGet 包添加到您的项目中。此包用于生成 SpecFlow 的 code-behind 文件。
  5. 将 specflow.json 文件添加到包含您的 specflow 功能文件 (*.feature) 的项目中
  6. 现在尝试重建您的解决方案。重建你的 *.feature.cs 文件应该得到 auto-generated。

要将旧版 Specflow v2.4.1 与 MSTest 结合使用,您只需执行以下操作:

在 Visual Studio 中设置此选项:

为您的功能文件设置 CustomTool 属性:

在您的测试项目的 App.Config 中有以下标签:

<specFlow>
  <unitTestProvider name="MsTest" />
</specFlow>

添加对 Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll 的引用,如下图所示:

确保您在测试项目中添加了以下两个 nuget 包:

  1. TechTalk v2.4.1 的 SpecFlow
  2. SpecRun.Runner 来自 TechTalk v1.1.0

然后尝试重新生成功能文件。如果这不起作用,请在执行以下步骤后再次尝试上述步骤:

  1. 关闭Visual Studio
  2. 删除用于 nuget 的包文件夹。
  3. 删除 binobj 个文件夹。
  4. 打开您的解决方案并运行清理解决方案。
  5. 恢复 nuget 包
  6. 重建解决方案

阅读以下链接可以很好地了解 specflow 代码生成内容:

https://docs.specflow.org/projects/specflow/en/latest/Tools/Generate-Tests-From-MsBuild.html https://docs.specflow.org/projects/specflow/en/latest/Installation/Unit-Test-Providers.html