Specflow 功能不会自动生成 cs 文件或在 C# Nunit 项目中显示为测试

Specflow features aren't auto-generating cs files or appearing as tests in C# Nunit project

(为清楚起见更新了此 post)

我无法创建起点 C# Specflow Nunit 项目(与以下在线教程和视频相反),新的 specflow 功能自动生成 cs 文件并显示为 运行 可用测试。

重现步骤:

  1. 安装 Visual Studio Community 2019 v16.3.5

  2. 扩展 > 管理扩展:为 VS 2019 (v2019.0.36.11860) 安装 Specflow。重新启动 VS 以接受向导上的 Specflow 安装。

  3. 新建项目 > 测试 > C# 单元测试项目(.Net Framework、C#、Windows、测试)。名称:myProject 框架:4.7.2

  4. 删除UnitTest1.cs自动生成的项目文件

  5. 从解决方案的 NuGet 管理器中,添加包:Specflow.NUnit v3.0.225(select 可以更改解决方案,并接受包许可证

  6. 向项目添加两个文件夹:Features、StepBindings

  7. 功能文件夹的新项目:Specflow 功能文件(类型:Visual C# 项目)名称myFeature.feature

结果: 没有自动生成的特征 cs 文件出现在新的绿色 myFeature.feature 文件

解决方案警告:在此系统上找不到自定义工具 'SpecFlowSingleFileGenerator'。 (文件:myFeature.feature)

注意:在“工具”>“选项”>“Specflow”下启用 SpecFlowSingleFileGenerator 设置为 False

  1. 右键单击 myFeature.feature 中的步骤 > 生成步骤定义 > 在 StepBindings 文件夹中另存为 'myFeatureSteps.cs' 结果:解决方案警告:ScenarioContext.Current 已过时(文件:myFeature.feature 第 12、18、24 行)

  2. View-Test Explorer

结果:未显示测试,包括单击 运行 全部(触发构建/发现测试/解决方案中的 运行)

进一步探索步骤:

  1. (必需?)添加了 nuGet 包:NUnit3TestAdapter v3.15.1

  2. 将 nuGet 包 NUnit 更新到 v3.12.0

  3. 重建项目,点击运行All in testexplorer,重启Visual Studio

最终结果:仍然没有测试显示在 运行ner 中,自动生成的代码仍然显示有错误 (ScenarioContext.Current)

packages.config:

<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="BoDi" version="1.4.1" targetFramework="net472" />
<package id="Gherkin" version="6.0.0" targetFramework="net472" />
<package id="MSTest.TestAdapter" version="1.3.2" targetFramework="net472" />
<package id="MSTest.TestFramework" version="1.3.2" targetFramework="net472" />
<package id="NUnit" version="3.12.0" targetFramework="net472" />
<package id="NUnit3TestAdapter" version="3.15.1" targetFramework="net472" />
<package id="SpecFlow" version="3.0.225" targetFramework="net472" />
<package id="SpecFlow.NUnit" version="3.0.225" targetFramework="net472" />
<package id="System.Reflection.Emit" version="4.3.0" targetFramework="net472" />
<package id="System.Reflection.Emit.Lightweight" version="4.3.0" targetFramework="net472" />
<package id="System.Threading.Tasks.Extensions" version="4.4.0" targetFramework="net472" />
<package id="System.ValueTuple" version="4.4.0" targetFramework="net472" />
<package id="Utf8Json" version="1.3.7" targetFramework="net472" />
</packages>

注意:最上面的 packages 元素带有下划线 "not declared"?

尝试使项目正常工作的代码: https://github.com/bobjames238745/getSpecflowWorkingWithNunit

查看您的 NuGet 包后,您需要先安装 SpecFlow.Tools.MsBuild.Generation 包,然后 feature.cs 文件将在生成时创建。