是否可以模拟NLog日志方法?

时间:2011-02-07 05:57:12

标签: nlog

是否可以/使用Rhino Mocks或类似方法模拟NLog日志方法?

3 个答案:

答案 0 :(得分:9)

使用Nuget:install-package NLog.Interface

然后:ILogger = new LoggerAdapter([logger-from-NLog]);

答案 1 :(得分:2)

您只能模拟虚拟方法。但是如果您创建一些用于日志记录的接口然后使用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));

答案 2 :(得分:1)

简单的回答是'不'。看一下代码,不支持依赖注入,这似乎是一种疏忽,特别是因为它看起来并不难实现(乍一看)。

项目中唯一的接口是支持COM互操作对象和其他一些东西。主Logger具体类既不实现接口,也不提供虚方法。

您可以自己提供接口,也可以使用Moles / TypeMock /其他隔离框架来模拟依赖项。