使用Rhino Mocks或類似方法模擬NLog日誌方法是否可能/容易?是否可以模擬NLog日誌方法?
6
A
回答
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]);
相關問題
- 1. Nlog日誌記錄方法
- 2. 是否可以 - 模擬此方法?
- 3. 是否可以模擬Activator.GetObject()?
- 4. 是否可以模擬iframe?
- 5. 在NLog中,是否可以使用佈局來定義日誌級別?
- 6. 用NLog集中記錄日誌的最佳方法是什麼?
- 7. 用Java編寫可模擬日誌API,正確的方法
- 8. 是否可以調用模擬對象的方法?
- 9. 是否可以發送日誌到Logstash
- 10. NLog - 刪除X天以前的日誌
- 11. 可以配置NLog在日誌達到一定限制後修剪日誌嗎?
- 12. NLog:無法寫入事件日誌
- 13. 是否可以在UIWebView上模擬UITouch?
- 14. 是否可以在IE8中模擬Object.getOwnPropertyNames
- 15. 是否可以模擬文件列表?
- 16. 是否可以模擬FTDI USB設備?
- 17. NLOG不outputing日誌文件
- 18. nLog缺少日誌數據
- 19. 如何刪除日誌(NLog)?
- 20. 檢查是否應記錄日誌事件NLog
- 21. 檢查NLog中是否發生日誌事件
- 22. 核素iPhone模擬器日誌是空
- 23. 是否可以在模擬中設置模擬?
- 24. 是否可以在iPhone模擬器上模擬電話?
- 25. 是否有日誌文件的Windows手機7模擬器
- 26. 模擬器安裝日誌?
- 27. 如何在日誌中模擬方法e
- 28. 是否有可能'期望'從部分模擬的方法
- 29. 是否可以使用Rails NumberHelper方法來模擬sprintf(「%g」)的行爲?
- 30. 是否可以模擬CakePHP測試(PHP單元)的方法的變量值?
試着看一下http://slf.codeplex.com/ – Jon 2012-03-22 12:13:15
見詳細信息[使用NLOG與依賴注入(HTTP://blog.tonysneed .COM/2011/10/09 /使用-n日誌與 - 依賴注入/)。該文章使用NInject作爲DI示例。 – 2012-10-13 13:08:28