如何在 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);
}