首页 > 解决方案 > 你如何模拟 ILogger LogInformation

问题描述

我有一个接收 ILogger 的类,我想模拟 LogInformation 调用,但这是一个扩展方法。如何为此进行适当的设置调用?

标签: c#loggingmocking

解决方案


如果您使用的是 Moq >= 4.13,这是一种模拟方法ILogger

logger.Verify(x => x.Log(
    It.IsAny<LogLevel>(),
    It.IsAny<EventId>(),
    It.IsAny<It.IsAnyType>(),
    It.IsAny<Exception>(),
    (Func<It.IsAnyType, Exception, string>)It.IsAny<object>()));

您可以将It.IsAny<LogLevel>()It.IsAny<EventId>()It.IsAny<Exception>()stub 更改为更具体,但 usingIt.IsAnyType是必要的,因为FormattedLogValuesis now internal

参考:ILogger.Log 中的 TState 以前是对象,现在是 FormattedLogValues


推荐阅读