Как ввести конфигурацию один раз в Specflow? - PullRequest
2 голосов
/ 18 октября 2019

Я создаю и регистрирую конфигурацию с моими пользовательскими значениями:

 IConfiguration configuration = new ConfigurationBuilder()
                        .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
                        .Build();
 container.RegisterInstanceAs<IConfiguration>(configuration);

это делается внутри метода с аннотацией [BeforeScenario(Order = 1)], я хотел бы сделать это в методе, аннотированном тегом [BeforeTestRun], ноэтот должен быть статичным. Это означает, что я не могу внедрить BoDi DI-контейнер в этот метод.

Таким образом, как загрузить конфигурацию только один раз за тестовый прогон и сделать ее доступной везде с помощью DI-контейнера?

1 Ответ

2 голосов
/ 19 октября 2019

Регистрация конфигурации один раз для каждого сценария означает, что 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...