Можно ли издеваться над методами журнала NLog? - PullRequest
6 голосов
/ 07 февраля 2011

Возможно ли / легко смоделировать методы журнала NLog, используя Rhino Mocks или аналогичные?

Ответы [ 3 ]

9 голосов
/ 27 сентября 2012

Использование Nuget: install-package NLog.Interface

Тогда: ILogger = new LoggerAdapter([logger-from-NLog]);

2 голосов
/ 26 июня 2011

Вы можете только издеваться над виртуальными методами. Но если вы создаете какой-то интерфейс для ведения журнала, а затем реализуете его с помощью NLog, вы можете использовать внедрение зависимостей, а в ваших тестах использовать смоделированный интерфейс, чтобы посмотреть, регистрирует ли тестируемая система (SUT), что вы ожидаете, что она будет регистрировать.

public class SUT
{
  private readonly ILogger logger;
  SUT(ILogger logger) { this.logger = logger;}
  MethodUnderTest() {
    // ...
    logger.LogSomething();
    // ...
  }
}

// and in tests
var mockLogger = new MockLogger();
var sut = new SUT(mockLogger);
sut.MethodUnderTest();
Assert.That("Expected log message", Is.Equal.To(mockLogger.LastLoggedMessage));
1 голос
/ 19 февраля 2012

Простой ответ - «нет».Глядя на код, внедрение зависимостей не поддерживается, что кажется довольно упущением, тем более что его реализация не выглядит сложной (на первый взгляд).

Поддерживаются только интерфейсы в проектеCOM-объекты взаимодействия и несколько других вещей.Основной конкретный класс Logger не реализует интерфейс и не предоставляет виртуальные методы.

Вы можете либо предоставить интерфейс самостоятельно, либо использовать Moles / TypeMock / другую изолированную среду для моделирования зависимости.

...