Я объявил класс LogManager
и интерфейс ILogManager
, и у него есть метод LoggerError
, этот метод использует ILogger
(DI) для входа в систему и выполнения других действий.
Существует класс A
(DI ILogClass) и объявляется метод funA()
,, а funA()
будет использовать _LogManager.LoggerError("test message")
.
- Когда мне проводить модульное тестирование с помощью mock?
- Как
Verify
_LogManager.LoggerError("test message")
?
Если я просто использую ILogger
в классе A
, я могу Verify
с:
loggerMock.Verify(l => l.Log(LogLevel.Error,It.IsAny<EventId>(),
It.Is<object>(o => o.ToString().Contains("test message")),null,It.IsAny<Func<object, Exception, string>>()), Times.Once);
но не поддерживается с ILogManager
макетом.
public class LoggerManager<TCategoryName> : ILoggerManager<TCategoryName>
{
private readonly ILogger<TCategoryName> _logger;
public LoggerManager(ILogger<TCategoryName> logger)
{
this._logger = logger;
}
public void LogError(string message, LoggerErrorType type)
{
var errorLogger = NLog.LogManager.GetLogger(loggerName);
errorLogger.Error(message);
}
}
class A
{
....DI
public void Test()
{
_loggerManager.LogError("test message")
}
}
UT:
public void TestUT()
{
var loggerMock = new Mock ILoggerManager A>>();
var service = ServiceFactory.Create<A>(loggerMock);
service.Test();
//how to Verify logerror message?
}