簡體   English   中英

如何使用 C# 對登錄到 log.net 進行單元測試

[英]How to unit test logging into log4net using C#

我需要測試消息是否正確登錄到 log.net。

public bool load(string fileName) {
    if (File.Exists(fileName))
        return true;
    Logger.Error("file does not exist");
    return false;
}

在我的測試文件中,我有這個:

[Test Class]
public FileTest {
    private File file;
    
    [TestInitialize]
    public void Setup() {
        file = new File();
    }

    [TestMethod]
    public void ConstructorSuccessedTest() {
        Assert.IsNotNull(file);
        Assert.IsNotNull(File.Logger);
    }
}

我需要另一種測試方法來了解Logger.Error()中的消息是否正確登錄到 log.net。

我不知道從哪里開始。

我找到了答案:

[TestMethod]
public void LoggerIngo()
{
    var appender = new log4net.Appender.MemoryAppender();
    log4net.Config.BasicConfigurator.configure(appender);
    
    var fileLoad = file.load("file.xlsx");

    var logEntries = appender.GetEvents();
    Assert.AreEquals("file does not exist", logEntries[0].MessageObject.ToString());
}

我不熟悉 log.net,但我認為您可以使用 Logger 的接口。

如果將 Logger 實例添加到構造函數,則可以添加 ILog 的 Mock。 只需斷言該模擬即可檢查消息。

private static readonly log4net.Ilog _logger;

public Cut (log4net.ILog logger){
    _logger = logger;
}

public bool load(string fileName) {
    if (File.Exists(fileName))
        return true;
    _logger.Error("file does not exist");
    return false;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM