.AddEnvironmentVariables() пуст, когда мой проект интеграционных тестов вызывает Program.csC#

Место общения программистов C#
Ответить
Anonymous
 .AddEnvironmentVariables() пуст, когда мой проект интеграционных тестов вызывает Program.cs

Сообщение Anonymous »

Моя программа.cs:

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

using Microsoft.AspNetCore.Mvc.ApiExplorer;
using System.Diagnostics.CodeAnalysis;

var builder = WebApplication.CreateBuilder(args);

var configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.AddEnvironmentVariables()
.Build();

// Add services to the container.

builder.Services.AddApiServices(configuration);

var app = builder.Build();

app.UseApi(app.Environment, app.Services.GetRequiredService());

app.Run();

[ExcludeFromCodeCoverage(Justification = "Program.cs will be tested with integration tests")]
[SuppressMessage("Major Code Smell", "S1118: Utility classes should not have public constructors", Justification = "Necessary for code coverage")]
public partial class Program;
Это интеграционный тест

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

public class BaseITFixture : IDisposable
{
public readonly HttpClient _client;
private readonly TestsSetupManager _TestsSetupManager;

public BaseITFixture()
{
IntegrationTestsApplicationFactory
 factory = new()
{
Options = new ConfigurationOptions
{
ENV = Environment.GetEnvironmentVariable("ENV") ?? "test"
}
};

_client = factory.CreateClient();

var token = TokenGenerator.GenerateToken();

_client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);

_TestsSetupManager = new TestsSetupManager(SubscribeToTestsSetupProcess(), this);
_TestsSetupManager.InitProcess();
_TestsSetupManager.Seed();
}

private bool disposedValue;
protected virtual void Dispose(bool disposing)
{
if (!disposedValue)
{
if (disposing)
{
_TestsSetupManager.Clean();
_client.Dispose();
}
disposedValue = true;
}
}

public void Dispose()
{
Dispose(disposing: true);
GC.SuppressFinalize(this);
}

private static Func SubscribeToTestsSetupProcess()
{
return () =>
{
return [];
};
}

}
Это класс IntegrationTestsApplicationFactory

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

public class IntegrationTestsApplicationFactory : WebApplicationFactory where TStartup : class
{
public ConfigurationOptions Options { get; set; } = new ConfigurationOptions();

protected override void ConfigureWebHost(IWebHostBuilder builder)
{
builder.ConfigureAppConfiguration((context, builder) =>
{
builder.AddIntegrationTestsConfiguration(Options);
}).ConfigureTestServices(services =>
{
services.AddSingleton();
});
}

public class FakePolicyEvaluator : IPolicyEvaluator
{
public virtual async Task AuthenticateAsync(AuthorizationPolicy policy, HttpContext context)
{
var principal = new ClaimsPrincipal();
principal.AddIdentity(new ClaimsIdentity([new Claim("Information", "some code")], "FakeScheme"));

return await Task.FromResult(AuthenticateResult.Success(new AuthenticationTicket(principal,
new AuthenticationProperties(), "FakeScheme")));
}

public virtual async Task
 AuthorizeAsync(AuthorizationPolicy policy,
AuthenticateResult authenticationResult, HttpContext context, object? resource)
{
return await Task.FromResult(PolicyAuthorizationResult.Success());
}
}
}
Во время отладки моих тестов я заметил, что они терпят неудачу, поскольку при вызове внешних API в потоке не удается получить часть URL-адреса, записанного в переменных среды, поскольку они не загружены. Я знаю, что, возможно, изменив файл программы или добавив класс Startup.cs, это можно исправить, но мне строго запрещено изменять файл программы, и я не могу добавить файл Startup.cs.


Подробнее здесь: https://stackoverflow.com/questions/790 ... call-progr
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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