2011-02-07 25 views
6

使用Rhino Mocks或類似方法模擬NLog日誌方法是否可能/容易?是否可以模擬NLog日誌方法?

+0

試着看一下http://slf.codeplex.com/ – Jon 2012-03-22 12:13:15

+1

見詳細信息[使用NLOG與依賴注入(HTTP://blog.tonysneed .COM/2011/10/09 /使用-n日誌與 - 依賴注入/)。該文章使用NInject作爲DI示例。 – 2012-10-13 13:08:28

回答

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)); 
1

簡單的答案是'不'。查看代碼,不支持依賴注入,這似乎相當疏忽,特別是因爲它看起來並不難實現(乍一看)。

項目中唯一的接口是支持COM互操作對象和其他一些東西。主要Logger具體類既不實現接口,也不提供虛擬方法。

您可以自己提供接口,也可以使用Moles/TypeMock /另一個隔離框架來模擬依賴關係。

9

使用的NuGet:install-package NLog.Interface

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