【问题标题】:Context injection in SpecFlow: how to avoid "BoDi.ObjectContainerException: Primitive types or structs cannot be resolved"?SpecFlow 中的上下文注入:如何避免“BoDi.ObjectContainerException:无法解析原始类型或结构”?
【发布时间】:2019-04-26 09:57:41
【问题描述】:

使用 SpecFlow,我想使用 Context Injection 在绑定之间共享数据,但是当某些实例无法解析时,我不知道如何避免“BoDi.ObjectContainerException: 'Primitive types or structs cannot be resolved”异常。

我一直在使用 ScenarioContext 和 FeatureContext 在绑定之间共享数据,但在 SpecFlow 3 中这些方法已过时(显示以下警告消息“ScenarioContext.Current is obsolete: Please get the ScenarioContext via Context Injection”)。所以,我开始使用上下文注入。

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

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 的步骤?

【问题讨论】:

    标签: c# specflow


    【解决方案1】:

    如果不是在每个步骤中都使用对象,则将对象添加到容器中并没有错。自己保持简单,然后将其添加到容器中的 [BeforeScenario] 钩子中。

    【讨论】:

      猜你喜欢
      • 2020-03-17
      • 1970-01-01
      • 1970-01-01
      • 2021-07-04
      • 1970-01-01
      • 2013-07-03
      • 1970-01-01
      • 2021-07-26
      • 2019-08-23
      相关资源
      最近更新 更多