Код: Выделить всё
class Program
{
internal static async Task RunAsync(IServiceProvider? serviceProvider = null)
{
ArgumentNullException.ThrowIfNull(serviceProvider);
var entryClass = serviceProvider.GetService();
ArgumentNullException.ThrowIfNull(entryClass);
await entryClass.ExecuteAsync();
return 0;
}
static string[] MapShortFlagsToLong(string[] args)
{
var flagMappings = new Dictionary
{
{ "-o1", "--option1" },
{ "-o2", "--option2" },
};
return args.Select(arg => flagMappings.TryGetValue(arg.ToLower(), out var longName) ? $"{longName}=true" : $"{arg}=true").ToArray();
}
static IServiceProvider ConfigureServices(string[] args)
{
var environmentName = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? string.Empty;
var mappedArgs = MapShortFlagsToLong(args);
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile($"appsettings.json", true, true)
.AddJsonFile($"appsettings.{environmentName}.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.Local.json", optional: true, reloadOnChange: true)
.AddCommandLine(mappedArgs)
.Build();
var services = new ServiceCollection();
services.Configure(config);
services.Configure(config);
services.AddSingleton();
... other registrations
return services.BuildServiceProvider();
}
static async Task Main(string[] args)
{
var serviceProvider = ConfigureServices(args);
int exitCode = await RunAsync(serviceProvider);
Environment.ExitCode = exitCode;
}
}
< /code>
Мой тестовый проект будет иметь доступ к методу Runasync, и мои методы испытаний будут такими, как это: < /p>
[Fact]
public async Task RunAsync_Should_Use_MockedEntryClass()
{
var services = new ServiceCollection();
var mockEntryClass = Substitute.For();
services.AddSingleton(mockEntryClass);
var serviceProvider = services.BuildServiceProvider();
var result = await Program.RunAsync(serviceProvider);
Assert.Equal(0, result);
}
Как я могу улучшить свою консоли. Структура приложения, чтобы сделать его легко тестируемым?
Подробнее здесь: https://stackoverflow.com/questions/794 ... y-testable