ASP.NET Core XUnit 用参数 (DI) 替换服务
ASP.NET Core XUnit replace service with parameter (DI)
我是 XUnit 的新手,我正在尝试使用新的应用程序设置和服务来配置我的测试项目。
该服务在构造函数中接受 appsettings class。
在我的 api 项目的启动文件中,我有以下内容:
services.Configure<AppSettings>(_configuration.GetSection("AppSettings"));
var appSettings = _configuration.GetSection(nameof(AppSettings)).Get<AppSettings>();
services.AddScoped<ILogging, MailLogging>(s => new MailLogging(appSettings));
这适用于我的 API,但现在我想在我的 XUnit 项目中实施它(但使用不同的 appsettings 文件)
var appsettings = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.Build()
.GetSection("AppSettings");
builder.ConfigureTestServices(services =>
services.Configure<AppSettings>(appsettings)
);
这有效,但是当我尝试实施新的 MailLogging 时,在服务中使用来自 AppSettings 的数据时出现 NullExceptions。 (评论中的两行都不起作用)
builder.ConfigureTestServices(services =>
//services.AddScoped<ILogging, MailLogging>(s => new MailLogging(appsettings as AppSettings))
//services.Replace(ServiceDescriptor.Scoped<ILogging, MailLogging>(s => new MailLogging(appsettings as AppSettings)))
);
有人能指出我正确的方向吗?
试试 Bind 方法:
var appsettingsSection = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.Build()
.GetSection("AppSettings");
var appSettings = new AppSettings();
appsettingsSection.Bind(appSettings);
builder.ConfigureTestServices(services =>
services.AddSingleton(appSettings);
services.AddScoped<ILogging, MailLogging>(s => new MailLogging(appsettings)
);
我是 XUnit 的新手,我正在尝试使用新的应用程序设置和服务来配置我的测试项目。 该服务在构造函数中接受 appsettings class。
在我的 api 项目的启动文件中,我有以下内容:
services.Configure<AppSettings>(_configuration.GetSection("AppSettings"));
var appSettings = _configuration.GetSection(nameof(AppSettings)).Get<AppSettings>();
services.AddScoped<ILogging, MailLogging>(s => new MailLogging(appSettings));
这适用于我的 API,但现在我想在我的 XUnit 项目中实施它(但使用不同的 appsettings 文件)
var appsettings = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.Build()
.GetSection("AppSettings");
builder.ConfigureTestServices(services =>
services.Configure<AppSettings>(appsettings)
);
这有效,但是当我尝试实施新的 MailLogging 时,在服务中使用来自 AppSettings 的数据时出现 NullExceptions。 (评论中的两行都不起作用)
builder.ConfigureTestServices(services =>
//services.AddScoped<ILogging, MailLogging>(s => new MailLogging(appsettings as AppSettings))
//services.Replace(ServiceDescriptor.Scoped<ILogging, MailLogging>(s => new MailLogging(appsettings as AppSettings)))
);
有人能指出我正确的方向吗?
试试 Bind 方法:
var appsettingsSection = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.Build()
.GetSection("AppSettings");
var appSettings = new AppSettings();
appsettingsSection.Bind(appSettings);
builder.ConfigureTestServices(services =>
services.AddSingleton(appSettings);
services.AddScoped<ILogging, MailLogging>(s => new MailLogging(appsettings)
);