Как использовать настройки из интеграционного тестового проекта в классе Startup api-проекта? - PullRequest
1 голос
/ 11 октября 2019

Я пытаюсь написать интеграционные тесты для веб-API, у меня есть два файла appsettings.json, один для проекта API и другой для интеграционных тестов. Я хочу использовать значения (строки подключения Azure Storage) из проекта тестирования интеграции в классе запуска Web API.

Я попытался создать CustomWebApplicatonFactory, так как он не работал, поскольку класс запуска Web API получает параметры, как показанониже.

//Configure services method in Startup class
public virtual void ConfigureServices(IServiceCollection services)
{
      var settings = ConfigurationProvider.GetConfiguration();
      services.TryAddSingleton(settings);
      services.AddHttpClient();
      var azureTableStorageConnectionString = 
      settings["AzureMainStoreConnectionStringSecretName"];

     //Other Startup related code
}

Я хочу изменить значение "azureTableStorageConnectionString" из моего проекта интеграционного тестирования. Помощь и предложения очень ценятся.

1 Ответ

1 голос
/ 11 октября 2019

Прежде всего, вместо использования статической функции ConfigurationProvider.GetConfiguration() введите IConfiguration в ваш класс Startup. Хост, который обычно определяется в классе Program, создает его для вас, чтобы вы могли внедрить его.

Тогда вместо использования WebApplicationFactory<TStartup> вы можете создать тестовый хост самостоятельно следующим образом.

[Fact]
public async Task LoadWeatherForecastAsync()
{
    var webHostBuilder = new WebHostBuilder()
        .UseContentRoot(AppContext.BaseDirectory)
        .ConfigureAppConfiguration(builder =>
        {
            builder.Sources.Clear();
            builder.SetBasePath(AppContext.BaseDirectory);
            // this is an appsettings file located in the test-project!
            builder.AddJsonFile("appsettings.Testing.json", false);
        })
        .UseStartup<Startup>();

    var host = new TestServer(webHostBuilder);

    var response = await host.CreateClient().GetAsync("weatherforecast");

    Assert.True(response.IsSuccessStatusCode);
}

Я создал образец на github . Вы можете клонировать его и попробовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...