To mock the behavior of ILogger
in Azure Functions with MockBehavior.Strict
(using Moq) you can use the following mock setup:
var loggerMock = new Mock<ILogger>(MockBehavior.Strict);
loggerMock.Setup(
log => log.Log(
LogLevel.Error,
It.IsAny<EventId>(),
It.IsAny<It.IsAnyType>(),
It.IsAny<Exception>(),
(Func<It.IsAnyType, Exception, string>)It.IsAny<object>()));
In the above example a mock setup is done which expects a call to logger.LogError(...).
Use a builder pattern such as below to easily add a mocked ILogger to your unit test:
public class LoggerMockBuilder
{
private readonly Mock<ILogger> _loggerMock;
public LoggerMockBuilder()
{
_loggerMock = new Mock<ILogger>(MockBehavior.Strict);
}
public LoggerMockBuilder WithLogLevel(LogLevel level)
{
_loggerMock
.Setup(
log => log.Log(
level,
It.IsAny<EventId>(),
It.IsAny<It.IsAnyType>(),
It.IsAny<Exception>(),
(Func<It.IsAnyType, Exception, string>)It.IsAny<object>()));
return this;
}
public Mock<ILogger> Create()
{
return _loggerMock;
}
}
Then create a mock of the logger using the builder in a unit test:
var loggerMock = new LoggerMockBuilder()
.WithLogLevel(LogLevel.Warning)
.Create();