从不同的装配体使用步骤定义时,转到定义 (F12) 不起作用。有办法让它发挥作用吗?
这可能是 Specflow 中的错误或类似问题。我有完全相同的问题。当尝试从功能文件转到步骤定义时,Visual Studio 表示没有匹配的步骤绑定。尽管在尝试运行测试时,它们会按照应有的方式运行,因此 Specflow 确实可以找到(并使用)匹配的步骤定义。
SpecFlow 1.8 Visual Studio 扩展不完全支持外部程序集中的绑定。他们的文档中对此进行了说明here。 SpecFlow 支持它们,但 Visual Studio 扩展仅部分支持它们。我不确定 1.9 是否解决了这个问题。
这可能是显而易见的,但请确保安装 SpecFlow 扩展。
工具 -> 扩展/更新 -> 在线 -> 搜索“Specflow”
我知道我吃晚饭有点晚了,但似乎 SpecFlow 将所有绑定数据存储在用户的 %temp% 文件夹中,并且这些文件是在功能文件和步骤文件之间映射的简单 .json 文件。
因此,当步骤与 .feature 文件位于同一解决方案中时 - SpecFlow 能够检测到正确的源文件和步骤方法的确切位置。
但是,当步骤位于引用的 dll 中时,.json 配置文件不足以定位 dll 中的元数据,因此 F12 不起作用。
我猜测这需要对引用的程序集进行某种设计时反思才能使 F12 工作。
@ShonnLyga 非常感谢,非常有用
要从 DLL 引用程序集,您现在可以使用
<specFlow>
<unitTestProvider name="NUnit" />
<stepAssemblies>
<stepAssembly assembly="YourDLLname" />
</stepAssemblies>
</specFlow>
与上面的答案类似 - 有时我发现我的步骤没有正确映射,并且我无法单击步骤到方法。
对我有用的是导航到 %temp% 文件夹并在我的临时文件夹中搜索“specflow-stepmap”文件。这些需要一些时间来加载,但是当它们加载时,我删除了在这里找到结果的所有文件,然后关闭并重新打开 Visual Studio。这通常会为我重新映射步骤。重新映射后,如果有效,按 F12 转到定义即可再次工作。
我知道这是一个老问题,但如果使用较新的 .net 框架,您可能会遇到它。 Specflow 已被正式弃用,并且不支持 .net 8,并且 F12 将无法使用。您需要安装其存储库中的此 VS 扩展才能使其正常工作 - https://github.com/SpecFlowOSS/SpecFlow.VS/releases/tag/v2022.1.93-net8