我无法使Specflow的代码后置文件重新生成

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

错误:在此系统上找不到自定义工具 'specflowsinglefilegenerator'

我发现这通常意味着我没有安装 Specflow 扩展,然而,当我在 Visual Studio 的扩展和更新中查看时,我可以看到已经安装了 'Specflow for Visual Studio 2017'
如果有人知道我该怎么做,那将非常有帮助。这是当我将仓库克隆到新文件夹时开始的。
我还尝试了清理和重建、关闭 Visual Studio、卸载并重新安装 Specflow 扩展、从 2019 切换到 2017 版本的 Visual Studio、重新启动计算机、更新 Specflow、删除 Specflow 缓存文件并强制重新生成文件等方法,但我对代码后端文件没有任何更改。
4个回答

35
在Visual Studio中,我选择:工具 > 选项 > Specflow。然后将"启用SpecFlowSingleFileGenerator Custom Tool"设置为True。
然而,这是一个过时的设置,我想尝试找到一种使用MSBuild的方法。

我在使用Specflow | NUnit时遇到了类似的问题。将选项设置为“True”解决了该问题。导航工具>选项>Specflow>常规>Legacy>启用SpecFlowSingleFileGenerator。 - Atul

3

以下是我从使用旧的“specflowsinglefilegenerator”生成*.feature.cs文件转换为每次构建测试项目时自动更新它们所必须采取的步骤。

该过程在Specflow的网站上有描述,但图片有助于理解该过程。

  1. 从所有的*.feature文件中移除'specflowsinglefilegenerator'自定义工具引用(改变前...)Before Change (改变后...)After change
  2. 删除与*.feature文件对应的当前*.feature.cs文件Delete *.feature.cs files
  3. 将Specflow升级至3.0.188或更高版本。以下内容适用于我。我使用NUnit作为我的测试框架。NUnit3TestAdapter是MS Test Explorer识别测试所必需的。(以下必备内容包括:NUnit、NUnit3TestAdapter、Specflow、Selenium.Webdriver、Selenium.Support) enter image description hereenter image description here enter image description here
  4. 向项目添加SpecFlow.Tools.MsBuild.Generation NuGet包。该包用于生成SpecFlow的代码后备文件。
  5. 向项目添加一个specflow.json文件,其中包含您的specflow功能文件(*.feature)enter image description here enter image description here
  6. 现在尝试重新构建您的解决方案。重新构建时,*.feature.cs文件应该会自动生成。

1
您还需要添加SpecFlow.Tools.MsBuild.Generation NuGet包。 - PeterB

1

如果要在MSTest中使用旧版Specflow v2.4.1,您需要执行以下操作:

在Visual Studio中设置此选项:

enter image description here

为您的特性文件设置CustomTool属性:

enter image description here

在您的测试项目的App.Config中有以下标记:
<specFlow>
  <unitTestProvider name="MsTest" />
</specFlow>

在下面的快照中添加对Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll的引用:

enter image description here

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

  1. SpecFlow by TechTalk v2.4.1
  2. SpecRun.Runner by TechTalk v1.1.0

enter image description here

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

  1. 关闭Visual Studio
  2. 删除NuGet包所用的packages文件夹。
  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


1
我曾经遇到过同样的问题。当我将SpecFlow升级到3.0.213版本时,feature.cs和tests都没有生成。然后我使用this最新的SpecFlow MSBuild示例,在测试资源管理器中生成了feature.cs和tests。它使用MSTest作为测试运行程序。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接