C# SpecFlow同解决方案跨项目引用Hooks失效问题咨询
问题原因
SpecFlow的绑定解析逻辑默认仅扫描当前测试项目程序集内标记了[Binding]特性的类(包含Step定义、Hooks生命周期方法),不会自动遍历所有引用的项目程序集做扫描,因此哪怕手动添加了项目引用,外部项目里的Hooks逻辑也不会被识别加载。
解决方案
按以下步骤配置即可实现跨项目Hooks正常执行:
先做基础校验
- 确认Hooks所在项目的所有Hooks类为
public访问级别,且类上标记了[Binding]特性 - 确认生命周期方法写法合规:比如
[BeforeTestRun]/[AfterTestRun]标记的方法必须是静态公共方法,其他作用域的Hooks方法为公共实例方法即可 - 确认两个项目引用的SpecFlow相关NuGet包版本完全一致,版本不匹配会导致绑定解析失败
- 确认Hooks所在项目的所有Hooks类为
配置额外扫描的程序集
如果你用的是SpecFlow 3+版本,在测试项目根目录找到或新建specflow.json文件,将文件的「复制到输出目录」属性设置为「如果较新则复制」,添加如下配置:{ "stepAssemblies": [ { "assembly": "Hooks所在项目的程序集名称" } ] }注意:程序集名称为Hooks项目编译生成的dll文件名(不带
.dll后缀),需和实际输出的文件名完全一致,不要写错。如果你用的是SpecFlow 2.x及更早的版本,直接修改测试项目的
App.config文件,在<specFlow>节点下添加如下配置:<specFlow> <stepAssemblies> <stepAssembly assembly="Hooks所在项目的程序集名称" /> </stepAssemblies> </specFlow>最后验证
重新生成整个解决方案,清理测试运行器的缓存后重新执行测试,跨项目的Hooks逻辑就会正常触发。
内容的提问来源于stack exchange,提问作者user3682704
相关产品推荐
相关产品推荐

