Я пытаюсь провести модульное тестирование некоторых случаев использования LoggerMessage.Define () с использованием библиотеки Moq в xUnit, но не могу понять это. Ниже приведен пример созданной мной функции ведения журнала, а ниже приведен пример модульного теста, который не смог проверить, вызван ли он.
Пример 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)));
}
Может кто-нибудь подсказать, как мне это исправить?
Спасибо!