我正在尝试进行一些初始设置,从而为特定功能下的场景设置环境。我将设置数据汇总到一个单独的类中。我添加了一个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)
您可以告诉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]那么您应该在每种情况下都获得相同的实例,因此在那里所做的任何修改都应该保留(假设这是您想要的,否则只是SetUp在BeforeScenario方法中创建一个新的)
现在,只要您的Step类要求SetUp在构造函数中提供一个实例,它们就应该获得放置在容器中的实例。