【发布时间】:2019-07-16 17:27:12
【问题描述】:
我正在尝试将一些简单的控制台日志记录添加到我在 ASP.NET Core 2.2 中的单元测试中,但由于日志记录配置已更改,我遇到了问题。
我目前有这段代码,它为我的班级“DataTests”创建了一个记录器:
// Create logger for our unit tests
var serviceProvider = new ServiceCollection()
.AddLogging()
.BuildServiceProvider();
var factory = serviceProvider.GetService<ILoggerFactory>();
var logger = factory.CreateLogger<DataTests>();
但它不会登录到调试窗口,我也无法对其进行配置。我想做类似的事情
factory.AddDebug();
但该扩展程序现已过时且不再可用。它被 ILoggingBuilder 上的扩展取代,而不是 ILoggerFactory。这就是它在文件 program.cs 中的使用方式:
public static void Main(string[] args)
{
var webHost = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.ConfigureAppConfiguration((hostingContext, config) =>
{
var env = hostingContext.HostingEnvironment;
config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json",
optional: true, reloadOnChange: true);
config.AddEnvironmentVariables();
})
.ConfigureLogging((hostingContext, logging) =>
{
// Requires `using Microsoft.Extensions.Logging;`
logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
logging.AddConsole();
logging.AddDebug();
logging.AddEventSourceLogger();
})
.UseStartup<Startup>()
.Build();
webHost.Run();
}
我的问题是我不知道如何从我的单元测试类中获取 ILoggingBuilder。我怎样才能做到这一点?很遗憾,将一个简单的记录器添加到一个简单的单元测试类中是如此复杂——我认为这应该是默认内置的。
【问题讨论】:
-
该框架高度模块化,因此您可以自定义您需要的内容,而无需在不需要的地方包含一堆样板膨胀。
-
您是为了获取日志实例而使用 DI 框架,还是出于其他原因在测试中使用 DI 框架?
-
我在应用程序中使用 DI,但在单元测试中没有。在单元测试中,我手动注入依赖项。
标签: c# unit-testing logging .net-core