2013-01-23 43 views
0

我试图验证某些错误是否记录在log4net文件中,并且发生了多少次。 我正在研究下面的代码,它将读取一个值,并断言它是否正确,但是 我想查看它在日志文件中出现的次数,如果它是真的,就会断言它。NUNIT测试c#中的日志文件

private string logfile; 

[SetUp] 
public void SetUp() 
{ 
    logfile = Path.Combine(
     Environment.GetEnvironmentVariable("ALLUSERSPROFILE"), 
     "test.log"); 

    if (File.Exists(logfile)) 
     File.Delete(logfile); 

    XmlConfigurator.Configure(); 
} 

[Test] public void GivenLog4NetFileAppender_WhenLogInfoStringWithLog4Net_ThenWritesToDisk() 
{ 
    ILog log = LogManager.GetLogger(typeof (LoggingIntegrationTests)); 
    log.Info("Error 2"); 

    LogManager.Shutdown(); 

    Assert.That(File.ReadAllText(logfile), 
       Is.StringContaining("Error 2")); 
} 

所以在上面的代码中,如果错误2被记录了3次比我想断言它出现了3次。 感谢您帮助

回答

2

你可以使用一个Regex来算的次数给定的字符串在另一个字符串中出现:

[Test] 
public void GivenLog4NetFileAppender_WhenLogInfoStringWithLog4Net_ThenWritesToDisk() 
{ 
    // arrange 
    ILog log = LogManager.GetLogger(typeof (LoggingIntegrationTests)); 
    string = "Error 2"; 

    // act 
    log.Info(dataToLog); 

    // assert 
    LogManager.Shutdown(); 
    var matches = Regex.Matches(File.ReadAllText(logfile), dataToLog); 
    Assert.AreEqual(3, matches.Count); 
}