我正在尝试进行一些初始设置,为特定功能下的场景设置环境。我把设置数据分成了一个单独的类。我添加了一个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"
}
}
答案 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
实例,他们就应该获得放置在容器中的实例。