SpecFlow 中的上下文注入:如何避免"BoDi.ObjectContainerException: Primitive types or structs cannot be resolved"?



使用SpecFlow,我想使用上下文注入在绑定之间共享数据,但我不知道如何避免"BoDi.ObjectContainerException:当某些实例无法解析时,无法解析基元类型或结构"异常。

我一直在使用 ScenarioContext 和 FeatureContext 在绑定之间共享数据,但在 SpecFlow 3 中,这些方法已经过时了(以下警告消息显示"ScenarioContext.Current 已过时:请通过上下文注入获取 ScenarioContext")。所以,我开始使用上下文注入。

我正在向容器添加一个对象实例:

private readonly IObjectContainer myInstance;
public CommonSteps(IObjectContainer myInstance)
{
this.myInstance = myInstance;
}
[When(@"I click on the dropdown")]
public void WhenIClickOnTheDropdown(string dropdown)
{       
MyClass myElement = ...
myInstance.RegisterInstanceAs(myElement);
}

然后在另一个绑定类中,我得到了该实例:

private readonly MyClass myInstance;
public MetadataConfigurationSteps(MyClass myInstance)
{
this.myInstance = myInstance;
}

问题是我在这个绑定类的每个步骤中都不需要 myInstance。我有一些测试中myInstance没有初始化,因为我不需要它,所以我会得到"BoDi.ObjectContainerException:'无法解析基元类型或结构"异常。

那么,如何避免此异常呢?我是否总是需要将 myInstance 添加到容器中,即使之后我不需要它?还是应该重构我的 MetadataConfigurationSteps 类,以便我只有使用 myInstance 的步骤?

如果每个步骤中都没有使用对象,那么将对象添加到容器中并没有错。只需保持简单,然后将其添加到[BeforeScenario]钩子中的容器中即可。

相关内容

最新更新