如何使用c#对登录log4net进行单元测试



我需要测试一条消息是否正确登录到log4net。

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()中的消息是否正确登录到log4net。

我不知道从哪里开始。

我找到了我的答案:

[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());
}

我不熟悉log4net,但我认为您可以使用Logger的接口。

如果将Logger实例添加到构造函数中,则可以添加ILog的Mock。只需断言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;
}

最新更新