gpt4 book ai didi

c# - 步骤类的 Specflow 容器尚未初始化

转载 作者:行者123 更新时间:2023-11-30 21:40:39 26 4
gpt4 key购买 nike

public class BaseSteps : Steps
{
[BeforeFeature]
public static void BeforeFeatureStep()
{
var otherStep = new OtherStep();
otherStep.ExecuteStep();
}
}

public class OtherStep : Steps
{
public void ExecuteStep()
{
var key = 'key';
var val = 'val';
this.FeatureContext.Add(key, val);
}
}

这是一个示例片段。当我尝试访问 this.FeatureContext.Add() 时,出现异常,指出 Container of the steps class has not been initialized

感谢任何帮助。

最佳答案

FeatureContext 未初始化,因为 Step 类未由 SpecFlow DI 容器解析。因此不会调用 SetObjectContainer 方法 ( https://github.com/techtalk/SpecFlow/blob/master/TechTalk.SpecFlow/Steps.cs#L10 )。

作为一般规则,您不应自行实例化步骤类,而应通过上下文注入(inject) (http://specflow.org/documentation/Context-Injection) 获取它们。

但这在您的情况下是不可能的,因为您处于 BeforeFeature Hook 中。

一个可能的解决方案是,您使用最新的 SpecFlow 预发布版 (https://www.nuget.org/packages/SpecFlow/2.2.0-preview20170523)。在那里,您可以通过 Hook 方法中的参数获取 FeatureContext。它看起来像这样:

[BeforeFeature]
public static void BeforeFeatureHook(FeatureContext featureContext)
{
//your code
}

您的代码可能如下所示:

public class FeatureContextDriver
{
public void FeatureContextChanging(FeatureContext featureContext)
{
var key = 'key';
var val = 'val';
featureContext.Add(key, val);
}
}

[Binding]
public class BaseSteps : Steps
{
[BeforeFeature]
public static void BeforeFeatureStep(FeatureContext featureContext)
{
var featureContextDriver = new FeatureContextDriver();
featureContextDriver.FeatureContextChanging(featureContext);
}
}

[Binding]
public class OtherStep : Steps
{
private FeatureContextDriver _featureContextDriver;
public OtherStep(FeatureContextDriver featureContextDriver)
{
_featureContextDriver = featureContextDriver;
}

public void ExecuteStep()
{
_featureContextDriver.FeatureContextChanging(this.FeatureContext);
}
}

代码未经测试/试用并应用驱动程序模式。


完全披露:我是 SpecFlow 和 SpecFlow+ 的维护者之一。

关于c# - 步骤类的 Specflow 容器尚未初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44405016/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com