2

我一直在使用 FeatureContext 来存储有关可以在该功能的所有场景中重用的特定功能的信息。但是,我有一些东西,比如我不想为每个功能重新创建的登录信息。我想使用 [BeforeTestRun] 属性来存储它,但 SpecFlow 是否具有某种全局上下文功能(如 log4net)来存储此信息,以便所有功能都可以重用它?

4

1 回答 1

4

SpecFlow 没有全局上下文构造,但是您有一些选项可以帮助您在绑定/功能之间共享数据:

静态成员

您可以使用静态字段/属性来设置可在测试执行期间跨所有功能使用的对象。但是请记住线程安全,因为如果您并行运行测试,则需要同步初始化和对该字段的任何可变访问。如果您希望每个场景更改此数据,您可以在访问时在上下文中设置对象,这样您可以设置默认值,并允许场景拥有自己的副本。

上下文注入

您可以使用 SpecFlow 上下文注入通过构造函数将对象注入到步骤定义中,这样您就可以使用其默认构造函数初始化您的类型,并将类型传递到步骤 def 中,如下所示:

[Binding]
public class MyStepDefinition
{
    private readonly MyContextData contextData;

    public MyStepDefinition(MyContextData contextData)
    {
        this.contextData = contextData;
    }
}

更多信息:

https://github.com/techtalk/SpecFlow/wiki/Sharing-Data-between-Bindings

于 2015-07-31T19:34:49.277 回答