Как читать настройки разработки при запуске тестового сервера в памяти?

Вопрос или проблема

У меня есть проект ASP.NET Core 8 Web API, который содержит следующие файлы настроек:

  • appsettings.json
  • appsettings.Local.json

Следуя инструкциям здесь, у меня также есть тестовый проект для запуска тестового сервера в памяти. На данный момент он настроен только с этой конфигурацией:

var factory = new WebApplicationFactory<Program>()
            .WithWebHostBuilder(builder =>
            {
                builder.ConfigureServices(services => 
                {
                });

                builder.ConfigureTestServices(services =>
                {
                });

                builder.ConfigureAppConfiguration(config =>
                {
                    config.AddConfiguration(Configuration);
                });
            });

Проблема в том, что когда тестовый проект запускает тестовый сервер в памяти, он выбирает файл appsettings.json вместо appsettings.Local.json из проекта ASP.NET Core Web API.

var builder = WebApplication.CreateBuilder(args);

//...регистрация некоторых сервисов здесь

builder.Configuration["ConnectionsStrings:MyData"] // Это считывает значение из "appsettings", а не из "appsettings.Local"

var app = builder.Build();

Как я могу настроить тестовый проект, чтобы Program.cs загружался со значениями из appsettings.Local.json?

Ответ или решение

Для того чтобы ваш тестовый проект ASP.NET Core 8 использовал значения из файла appsettings.Local.json, вам нужно убедиться, что этот файл правильно загружается в конфигурацию приложения во время тестирования. Ваша текущая реализация конфигурации тестового сервера не указывает на использование именно appsettings.Local.json.

Вот шаги, которые необходимо осуществить для корректной настройки:

  1. Добавьте файл конфигурации в тестовый проект: Убедитесь, что файл appsettings.Local.json доступен для вашего тестового проекта. Он должен находиться в каталоге проекта и иметь правильные настройки копирования (например, "Copy to Output Directory").

  2. Настройка конфигурации в тестах: При создании экземпляра WebApplicationFactory, в методе ConfigureAppConfiguration добавьте загрузку appsettings.Local.json так, чтобы он имел более высокий приоритет, чем appsettings.json. Вот пример того, как это можно сделать:

public class YourTestClass : IClassFixture<WebApplicationFactory<Program>>
{
    private readonly WebApplicationFactory<Program> _factory;

    public YourTestClass(WebApplicationFactory<Program> factory)
    {
        _factory = factory.WithWebHostBuilder(builder =>
        {
            builder.ConfigureAppConfiguration((context, config) =>
            {
                // Очищаем существующие конфигурации
                config.Sources.Clear();

                // Добавляем appsettings.Local.json в конфигурацию с наивысшим приоритетом
                config.AddJsonFile("appsettings.Local.json", optional: true, reloadOnChange: true);

                // Добавляем appsettings.json
                config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);

                // При необходимости добавляем другие источники конфигурации
            });
        });
    }

    [Fact]
    public async Task YourTestMethod()
    {
        // Ваш тестовый код, который будет использовать настройки из appsettings.Local.json
    }
}
  1. Убедитесь, что приложение использует правильную конфигурацию: В классе Program.cs вы можете проверить, что приложение действительно загружает конфигурацию. Обычно вы обращаетесь к конфигурации через builder.Configuration.
var builder = WebApplication.CreateBuilder(args);

// Проверка, что значение под доступом к строкам подключения корректно получено
var connectionString = builder.Configuration["ConnectionStrings:MyData"];
  1. Запуск тестов: После того как вы внесли изменения в тестовый код, запустите свои тесты. Теперь приложение должно использовать значения из appsettings.Local.json, и любые изменения, сделанные в этом файле, должны отражаться в тестах.

Таким образом, эти шаги помогут вам гарантировать, что ваш тестовый проект будет загружать настройки из нужного конфигурационного файла, обеспечивая корректную работу всего вашего тестового окружения.

Оцените материал
Добавить комментарий

Капча загружается...