如何使用Moq对.NET Core 3.1中的LoggerMessage.Define()进行单元测试?

本杰明

我正在尝试使用xUnit中的Moq库对LoggerMessage.Define()的某些用法进行单元测试,但无法弄清楚。下面是我创建的日志记录功能的示例,下面是无法检查调用它的示例单元测试。

LoggerMessage.Define()示例:

public static class GlobalExceptionLoggerMessage
{
    public static Action<ILogger, string, Exception> GlobalException = LoggerMessage.Define<string>(
        LogLevel.Error,
        new EventId(StatusCodes.Status500InternalServerError, nameof(GlobalException)),
        "{Message}");

    public static void LogGlobalException(this ILogger logger, string message, Exception exception)
    {
        GlobalException(logger, message, exception);
    }
}

我试过的单元测试示例:

[Fact]
public void LogGlobalExceptionLogTest()
{
    var loggerMock = new Mock<ILogger<object>>();

    var exception = new Exception("Person must exist.");
    const string message = "Person must exist for an object.";

    loggerMock.Object.LogGlobalException(message, exception);

    loggerMock.Verify(
        x => x.Log(
            It.IsAny<LogLevel>(),
            It.IsAny<EventId>(),
            It.Is<It.IsAnyType>((v, t) => true),
            It.IsAny<Exception>(),
            It.Is<Func<It.IsAnyType, Exception, string>>((v, t) => true)));
}

有人可以请问我如何解决这个问题吗?

谢谢!

g

您需要进行一些其他设置。如果看一下静态Define方法,您将看到以下内容:

if (!logger.IsEnabled(logLevel))
  return;
Log(logger, arg1, exception);

您尚未IsEnabled在模拟记录器上进行设置,因此它将返回默认的布尔值(false),并且不会调用Log方法。

如果添加以下内容,请进行采样:

loggerMock.Setup(x => x.IsEnabled(It.IsAny<LogLevel>())).Returns(true);

...您的验证语句开始工作。

工作实例

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何对.NET Core中的Startup.cs进行单元测试

如何在ASP.NET Core中使用ILogger进行单元测试

如何在ASP.NET Core 1 MVC 6中模拟IFormFile进行单元/集成测试?

如何对ASP.NET Core Web应用程序(.Net Framework)进行单元测试?

如何在ASP.NET Core 1.1中对使用HttpContext的MVC控制器进行单元测试

使用Moq .net Core进行单元测试文件上传

是否可以在.net core中对F#项目进行单元测试?

使用JWT声明对.NET Core Web API控制器进行单元测试

如何使用Moq对在.NET中使用asmx服务的应用程序进行单元测试

.NET Core如何进行单元测试服务?

如何在ASP.NET Core中对ViewBag进行单元测试?

如何在ASP.NET Core中对Web API的动作过滤器属性进行单元测试?

如何在Visual Studio 2017 Mac中调试.NET Core /标准单元测试?

在ASP.NET Core中对自定义密码验证器进行单元测试

模拟ASP.NET Core中的User.Identity以进行单元测试

如何模拟Amazon S3客户端进行.NET单元测试

如何使用依赖注入.net Core 2进行单元测试

如何使用Moq在.NET Core 2.1中模拟新的HttpClientFactory

如何在ASP.NET Core的X单元单元测试中模拟AutoMapper IConfigurationProvider

如何模拟ExceptionContext以使用.NET Core 3 Web API和Moq进行测试

在.Net Core中对BackgroundService进行单元测试时要声明或验证的内容

如何在ASP.NET Core MVC中对RazorViewEngineOptions进行单元测试?

如何对返回匿名对象的ASP.NET Core MVC控制器进行单元测试?

使用 xunit 和 moq 进行 net core api 控制器单元测试

如何在 .NET Core 3.1 中对使用 ExecuteSqlRawAsync 调用存储过程的函数进行单元测试?

在使用 xunit 和 .net core 3.1 进行单元测试时获取记录器

如何在 .Net Core 中对 ADF PipeLineRun 进行单元测试?

如何在 ASP.NET Core 中使用 mysql 进行单元测试、actionresult

使用 xUnit 和 Moq 在 .NET 5 中对 FluentEmail 进行单元测试