Context Injection和BeforeFeature钩子

时间:2014-10-07 01:45:45

标签: bdd specflow

我正在尝试进行一些初始设置,为特定功能下的场景设置环境。我把设置数据分成了一个单独的类。我添加了一个specflow钩子文件并将其修改为以前的功能钩子。然后我尝试使用Context Injection。在我创建了一个安装类的私有变量和一个构造函数(获取安装类的对象)为BeforeScenario钩子文件。

我面临的问题是BeforeFeature方法必须按照specflow静态。如果我使我的私有安装程序类静态,那么构造函数不会被调用。

我做得对吗?或者甚至可能我想做什么?

[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"
    }
}

1 个答案:

答案 0 :(得分:5)

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

中所示完成
[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);
    }
}

您在场景之前进行设置而不是功能,但如果您只创建SetUp一次并在[BeforeFeature]中设置其值,那么您应该在每个场景中获得相同的实例,以便进行任何修改应该坚持(假设这是你想要的,否则只需在SetUp方法中创建一个新的BeforeScenario

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