Как сделать интеграционные тесты для контроллера веб -API с зависимостью конфигурации настройки Serilog? ⇐ C#

Место общения программистов C#
Anonymous
Как сделать интеграционные тесты для контроллера веб -API с зависимостью конфигурации настройки Serilog?

Сообщение Anonymous »

my program.cs файл выглядит так:

Код: Выделить всё

public class Program
{
private static IConfigurationRoot _apiConfiguration = null!;

public static async Task Main(string[] args)
{
try
{
var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");

if (environment == Environments.Development)
{
_apiConfiguration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile("appsettings.Development.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables()
.Build();
}
else
{
_apiConfiguration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddEnvironmentVariables()
.Build();
}

await CreateHostBuilder(args).Build().RunAsync();
}
catch (Exception ex)
{
// log
}
}

public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging(loggingBuilder =>
{
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(_apiConfiguration) // This throws System.NullReferenceException: 'Object reference not set to an instance of an object.' as _apiConfiguration is null
.Enrich.FromLogContext()
.Enrich.WithProperty("ApplicationName", "WeatherAPI")
.WriteToOtlpSerilog()
.CreateLogger();
loggingBuilder.AddSerilog();
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup();
});
}
Я пытаюсь написать интеграционный тест для контроллера с помощью webapplicationfactory . Однако с моей простой настройкой я столкнулся с исключением NullReference для _apiconfiguration внутри метода ConfigureLogging . Это устанавливается, когда вызовут Main метод.

Код: Выделить всё

[TestClass]
public class WeatherControllerTests : WebApplicationFactory
{
[TestMethod]
public async Task TestAsync()
{
var client = CreateClient();

var response = await client.GetAsync("/weather/getforecast");

Assert.IsNotNull(response);
}
}
Я попытался переопределить конфигурацию webhost и настроить ведение журнала, но это не помогает, поскольку основная настройка журнала называется независимо.>

Подробнее здесь: https://stackoverflow.com/questions/796 ... configurat

Вернуться в «C#»