Fork me on GitHub

一个用于 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编写集成测试的所有不同场景。

posted @ 2022-06-24 15:25  张善友  阅读(642)  评论(0编辑  收藏  举报