实例化UnitTest项目的服务提供商



所以这里有一点上下文:

我有一个ASP。NET核心项目,一切就绪。我有不同的服务需要测试。我为此创建了一个UnitTest项目。

我的问题是,当我试图测试谷歌驱动器上传服务(它需要一个服务提供商(IServiceProvider((,但我找不到任何方法来实例化服务提供商时,通常它在ASP启动时是无形的。Net Core本身,但正如我所说,出于测试目的,我需要它在我的UnitTest项目中从头开始完全安装。

这是我目前的UnitTest项目设置:

IConfiguration configuration = new ConfigurationBuilder()

.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.Build();

var serviceCollection = new ServiceCollection();
Startup s = new Startup(configuration);
s.ConfigureServices(serviceCollection);

/*serviceCollection.AddScoped<GoogleService>();
//serviceCollection.AddSingleton(_appContext);
serviceCollection.AddSingleton<Service.Domains.ApplicationDomain.Bll.Models.ApplicationCache>();
serviceCollection.AddScoped<Service.Services.AuditService>();
serviceCollection.AddHttpContextAccessor();*/

IServiceProvider provider = serviceCollection.BuildServiceProvider();
//services.AddScoped<Service.Services.AuditService>();
_service = new AuditService(GetDatabaseContext(), configuration, provider);

修复似乎很简单:

我们可以在程序类中重用HostBuilder:

.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.Build();

var serviceCollection = new ServiceCollection();
Startup s = new Startup(configuration);
s.ConfigureServices(serviceCollection);
var hostBuilder = Program.CreateHostBuilder(new string[] { }).Build().Services;
//services.AddScoped<Service.Services.AuditService>();
_auditService = new AuditService(GetDatabaseContext(), configuration, hostBuilder.GetRequiredService<IServiceProvider>());

最新更新