一个用于 Microsoft.Extensions.Logging 的测试库MELT
日志是诊断、监视或审核应用程序行为的关键元素,因此,如果您是库作者或正在开发应用程序,则确保生成正确的日志非常重要。Microsoft.Extensions.Logging是.NET中事实上的标准抽象,用于从库或应用程序生成日志,因为它与 ASP.NET Core的第一个版本一起推出。在开发和使用日志记录库的方面,ASP.NET Core 团队创建了 Microsoft.Extensions.Logging.Testing,这是一个在 ASP.NET Core 内部用于测试日志记录的库。
可惜的是,ASP.NET团队 目前没有计划为它提供出来,也正是在这个issue 的末尾出现了一个库MELT。 MELT 是一个免费的开源测试库,用于 .NET 标准 Microsoft Extensions Logging 库。它是在Apache许可证2.0下授权的。
如何使用 MELT 编写单元测试?
安装 NuGet 包 MELT
<PackageReference Include="MELT" Version="0.8.0" />
获取LoggerFactory
var loggerFactory = MELTBuilder.CreateLoggerFactory();
像往常一样,从LoggerFactory获取ILogger,传递给您的夹具。
var logger = loggerFactory.CreateLogger<Sample>();
LoggerFactory 公开一个属性LogEntries
,该属性枚举捕获的所有日志。每个条目都公开日志的所有相关属性。 例如,xUnit测试是否已发出单个日志,并且该日志具有特定消息:
var log = Assert.Single(loggerFactory.LogEntries);
Assert.Equal("The answer is 42", log.Message);
LoggerFactory 公开一个属性Scopes
,该属性枚举捕获的所有作用域。 例如,xUnit要测试是否已发出单个作用域并且它具有特定消息,请执行以下操作:
var scope = Assert.Single(loggerFactory.Scopes);
Assert.Equal("I'm in the GET scope", scope.Message);
对于集成测试,您需要一些设置,但它非常简单,并且支持为 ASP.NET Core编写集成测试的所有不同场景。
欢迎大家扫描下面二维码成为我的客户,扶你上云