Код: Выделить всё
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 [];
};
}
}
Код: Выделить всё
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());
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... call-progr
Мобильная версия