是否可以/使用Rhino Mocks或类似方法模拟NLog日志方法?
答案 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 /其他隔离框架来模拟依赖项。