为 SpecFlow 测试中的所有功能存储一个全局变量 运行
Store a global variable for all features in a SpecFlow test run
我一直在使用 FeatureContext 来存储有关特定功能的信息,这些信息可以在该功能的所有场景中重复使用。但是,我不想为每个功能重新创建一些登录信息之类的东西。我想使用 [BeforeTestRun] 属性来存储它,但是 SpecFlow 是否具有某种全局上下文功能(如 log4net)来存储此信息以便它可以被所有功能重用?
SpecFlow 没有全局上下文构造,但是您有几个选项可以帮助您在 bindings/features:
之间共享数据
静态成员
您可以使用静态 field/property 来设置可在测试执行期间跨所有功能使用的对象。但是请记住线程安全,因为如果您 运行 并行测试,则需要同步初始化和对该字段的任何可变访问。如果您希望此数据根据场景更改,您可以在访问时在上下文中设置对象,这样您可以设置默认值,并允许场景拥有自己的副本。
上下文注入
您可以使用 SpecFlow 上下文注入通过构造函数将对象注入到步骤定义中,这样您就可以使用其默认构造函数初始化您的类型,并将类型传递到步骤定义中,如下所示:
[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
我一直在使用 FeatureContext 来存储有关特定功能的信息,这些信息可以在该功能的所有场景中重复使用。但是,我不想为每个功能重新创建一些登录信息之类的东西。我想使用 [BeforeTestRun] 属性来存储它,但是 SpecFlow 是否具有某种全局上下文功能(如 log4net)来存储此信息以便它可以被所有功能重用?
SpecFlow 没有全局上下文构造,但是您有几个选项可以帮助您在 bindings/features:
之间共享数据静态成员
您可以使用静态 field/property 来设置可在测试执行期间跨所有功能使用的对象。但是请记住线程安全,因为如果您 运行 并行测试,则需要同步初始化和对该字段的任何可变访问。如果您希望此数据根据场景更改,您可以在访问时在上下文中设置对象,这样您可以设置默认值,并允许场景拥有自己的副本。
上下文注入
您可以使用 SpecFlow 上下文注入通过构造函数将对象注入到步骤定义中,这样您就可以使用其默认构造函数初始化您的类型,并将类型传递到步骤定义中,如下所示:
[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