上下文注入和BeforeFeature挂钩

Not*_*ica 1 bdd specflow

我正在尝试进行一些初始设置,从而为特定功能下的场景设置环境。我将设置数据汇总到一个单独的类中。我添加了一个specflow挂钩文件,并对其进行了修改,使其可以用作以前的功能挂钩。然后我尝试使用上下文注入。在I中,我为BeforeScenario挂钩文件创建了安装程序类的私有变量和构造函数(采用安装程序类的对象)。

我面临的问题是,按照规范流程,BeforeFeature方法必须为静态方法。如果我将私有安装程序类设为静态,则不会调用构造函数。

我在做什么对吗?还是有可能我正在尝试做?

[Binding]
public class BeforeFeature
{
    private static SetUp setUp;

    public BeforeFeature(SetUp setUpObject)
    {
        setUp = setUpObject;
    }

    [BeforeFeature]
    public static void RunBeforeFeature()
    {
        //Some processing. 
        setUp.baseDir = "some data";
        setUp.status = "some data"
    }
}
Run Code Online (Sandbox Code Playgroud)

Sam*_*der 6

您可以告诉SpecFlows上下文注入框架,当Step类在其构造函数中要求实例时,应使用该对象。可以像示例中所示

[Binding]
public class BeforeFeature
{
    private readonly IObjectContainer objectContainer;
    private static SetUp setUp;

    public BeforeFeature(IObjectContainer container)
    {
        this.objectContainer = objectContainer;
    }

    [BeforeFeature]
    public static void RunBeforeFeature()
    {
        //Some processing. 
        setUp.baseDir = "some data";
        setUp.status = "some data"
     }

    [BeforeScenario]
    public void RunBeforeScenario()
    {            
        objectContainer.RegisterInstanceAs<SetUp>(setUp);
    }
}
Run Code Online (Sandbox Code Playgroud)

您在场景而不是功能之前进行设置,但是如果仅创建SetUp一次并在中设置其值,[BeforeFeature]那么您应该在每种情况下都获得相同的实例,因此在那里所做的任何修改都应该保留(假设这是您想要的,否则只是SetUpBeforeScenario方法中创建一个新的)

现在,只要您的Step类要求SetUp在构造函数中提供一个实例,它们就应该获得放置在容器中的实例。