C# log4net和nunit测试,最基本的例子

C# log4net和nunit测试,最基本的例子,c#,tdd,nunit,log4net,C#,Tdd,Nunit,Log4net,我想尝试从我的应用记录一些应用消息。在这种情况下,我只想强制nunit使用log4net。我在这里找到了一些例子 log4net在app.config中被混淆如下: [TestFixture] class DomainTests { protected static readonly ILog log = LogManager.GetLogger(typeof(DomainTests)); public void LoggingTests() {

我想尝试从我的应用记录一些应用消息。在这种情况下,我只想强制nunit使用log4net。我在这里找到了一些例子

log4net在app.config中被混淆如下:

[TestFixture]
class DomainTests
{
    protected static readonly ILog log = LogManager.GetLogger(typeof(DomainTests));
    public void LoggingTests()
    {            
        log4net.Config.XmlConfigurator.Configure(); 
    }

    [Test]
    public void BasicLogTest()
    {
        log.Error("write my log entry already");
    }

    [SetUp]
    RunBeforeAnyTests()
    {
        BasicConfigurator.Configure();
    }

    [TearDown]
    RunAfterAnyTests()
    {
        // ...
    }

在我的测试中,代码如下所示

[TestFixture]
class DomainTests
{
    protected static readonly ILog log = LogManager.GetLogger(typeof(DomainTests));
    public void LoggingTests()
    {            
        log4net.Config.XmlConfigurator.Configure(); 
    }

    [Test]
    public void BasicLogTest()
    {
        log.Error("write my log entry already");
    }
我的测试通过了,但log.txt文件中没有写入任何内容。我做错了什么?

我只想使存储消息尽可能简单,比如输入应用程序、退出应用程序。问候。

我最好的猜测是你可以这样做:

[TestFixture]
class DomainTests
{
    protected static readonly ILog log = LogManager.GetLogger(typeof(DomainTests));
    public void LoggingTests()
    {            
        log4net.Config.XmlConfigurator.Configure(); 
    }

    [Test]
    public void BasicLogTest()
    {
        log.Error("write my log entry already");
    }

    [SetUp]
    RunBeforeAnyTests()
    {
        BasicConfigurator.Configure();
    }

    [TearDown]
    RunAfterAnyTests()
    {
        // ...
    }
我也会使用Log4Net.config文件而不是app.config文件,它看起来更干净。下面是一个示例log4net.config文件:


问题在于NUnit测试运行程序(在visual studio中从resharper运行时)从另一个文件夹运行测试(它会卷影复制测试程序集),因此除非指定完整配置路径,否则xml配置在该点不可用

当然,您可以使用基本配置并在代码中指定日志记录配置,如:

log4net.Config.BasicConfigurator.Configure(
  new log4net.Appender.ConsoleAppender {
    Layout = new log4net.Layout.SimpleLayout()});

之后,您应该在测试输出中看到日志输出。

您可以调整单元测试以检查文件本身(而不是手动检查)。请注意存储在环境变量中的文件路径。这也适用于TeamCity测试跑步者(无需硬编码路径)

配置:


代码:


只要我知道并将log4net与nunit一起使用,我从未使用过任何配置文件,您只需要在测试类构造函数中添加以下行

BasicConfigurator.Configure();

如果您想查看示例测试类,Log4Net是否正常工作?我问这个问题的原因是,我想知道我们是否需要检查您的Log4Net加载过程……另外,为了节省您每次使用这个来在类之间复制/粘贴日志时键入类名:private static readonly ILog Logger=LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);你的意思是它如何正常工作?:)我将log4net引用添加到我的测试项目中,其余的代码发布在这里,在运行测试或构建prj时没有给出错误消息。@Vijay,我需要一些使用nunit和app.config进行日志记录的具体示例,如果你已经有一些东西要检查的话。这个log.txt位于哪里?我已经复制了您的代码,并在app.config中指定了c:\log.txt,然后它就可以正常工作了。请尝试指定log.txt的完整路径