如何在 Specflow 中一次性注入配置?
How to inject configuration once in the Specflow?
我使用我的自定义值构建和注册配置:
IConfiguration configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.Build();
container.RegisterInstanceAs<IConfiguration>(configuration);
这是在带有 [BeforeScenario(Order = 1)]
注释的方法内部完成的,我想在由 [BeforeTestRun]
标记注释的方法中完成,但是这个需要是静态的。这意味着我无法将 BoDi
DI 容器注入到此方法中。
因此如何每次测试只加载一次配置 运行 并使其在 DI 容器中随处可用?
每个场景注册一次配置是 SpecFlow 的工作方式,因此测试是线程安全的并且可以 运行 并行。话虽这么说,读取配置文件应该是相当安全的,即使在多线程环境中也是如此。您可以使用静态字段初始化配置一次,然后在每个场景之前注册相同的实例:
private static IConfiguration config;
[BeforeScenario]
public void CreateConfig()
{
if (config == null)
{
config = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.Build();
}
container.RegisterInstanceAs<IConfiguration>(config);
}
我使用我的自定义值构建和注册配置:
IConfiguration configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.Build();
container.RegisterInstanceAs<IConfiguration>(configuration);
这是在带有 [BeforeScenario(Order = 1)]
注释的方法内部完成的,我想在由 [BeforeTestRun]
标记注释的方法中完成,但是这个需要是静态的。这意味着我无法将 BoDi
DI 容器注入到此方法中。
因此如何每次测试只加载一次配置 运行 并使其在 DI 容器中随处可用?
每个场景注册一次配置是 SpecFlow 的工作方式,因此测试是线程安全的并且可以 运行 并行。话虽这么说,读取配置文件应该是相当安全的,即使在多线程环境中也是如此。您可以使用静态字段初始化配置一次,然后在每个场景之前注册相同的实例:
private static IConfiguration config;
[BeforeScenario]
public void CreateConfig()
{
if (config == null)
{
config = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.Build();
}
container.RegisterInstanceAs<IConfiguration>(config);
}