【问题标题】:Log4net not working with NUnit testsLog4net 不适用于 NUnit 测试
【发布时间】:2016-08-23 13:26:11
【问题描述】:

所以我做了一些环顾四周。我发现的大多数线程似乎都与希望在实际测试中运行 log4net 的人有关。这意味着他们想要在他们的测试类中记录条目。我不想要我的实际测试中的日志条目。但我确实想要我正在测试的代码中的预期日志条目。这是我第一次使用 Log4net。如果我自己运行代码,则日志条目将起作用。如果我运行测试,则没有日志条目。我猜它没有正确初始化,或者我的 UnitTest 中可能没有正确设置 log4net(可能在 appconfig 或程序集中??)。这是一个 MVC 5 应用程序。这是一个基本示例。

Nunit 测试(基础):

namespace MyUnitTests
[TestFixture]
public class MyTestClass
{
    [Test]
    public void MyTest
    {
        //arrange
        var testVar = @"string";

        //act
        MyProjectClass.Method(testVar);

        //assert something
    }
} 

在 MyProject 中我有(基础):

public class MyProjectClass : Controller
{
    private static readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof(MyProjectClass));

    public static void Method(string myString)
    {
        //does whatever
        log("added value");
    }  

所以我显然已经简化了这个讨论。但是当我运行我的实际测试时,我的测试通过了,值和结果都是应该的。我只是从未在日志中看到我刚刚测试过的方法的日志条目。我确定我错过了一些简单的东西。任何帮助将不胜感激。谢谢!

【问题讨论】:

    标签: c# asp.net-mvc tdd log4net


    【解决方案1】:

    如果您查看主项目的 app.config,您应该会看到指定日志文件位置的 log4net 配置部分。

    您首先需要将 log4net 添加到您的<configSections>,如下所示:

    <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821" /> </configSections>

    然后您可以将&lt;log4net&gt; 部分添加到&lt;configuration&gt; 标记。可以在here 找到相关文档。

    【讨论】:

    • 所以尝试将我在 WebConfig 中的内容添加到我的 UnitTest 中的 AppConfig 中。还是不行。
    • 我没有做组装。 //logger [程序集:log4net.Config.XmlConfigurator(ConfigFile = "Web.config", Watch = true)]。让我尝试将它也添加到我的 UnitTest 项目中。
    • 确保你的 UnitTest 项目中也有对 log4net 程序集的引用。
    • 所以我在单元测试项目中的程序集和 appconfig 设置与我的应用程序中的设置相同。我仍然没有收到日志条目,但我认为这可能是因为从我的 UnitTest 项目到日志文件的路径不同。在 WebConfig(在应用程序中)它是 。因此,这不是 AppConfig(在单元测试项目中)中获取同一文件的路径。相对路径不一样。
    • 这听起来很合理。尝试将值设置为固定路径,看看日志文件是否以这种方式创建。
    【解决方案2】:

    我只想添加上面的答案。除了将 UnitTest 中的 appconfig 设置为与应用程序 webconfig 相同(如果需要,可以编辑日志文件位置的值),您还需要像应用程序一样添加程序集条目(将 web.config 更改为 app .config 在我的情况下)。

    //logger
    [assembly: log4net.Config.XmlConfigurator(ConfigFile = "app.config", Watch = true)]    
    

    您还需要在单元测试中初始化记录器(至少我做过)。所以基本上我在我的测试安排中添加了这个,如果我想要我在我正在测试的方法中登录。可能在您的安排或设置中为您的测试课程添加类似的内容:

    [Test]
    public void MyTest
    {
        //arrange
        log4net.ILog log = log4net.LogManager.GetLogger(typeof(MyTestClass));
            log4net.Config.XmlConfigurator.Configure();
    
    }
    

    【讨论】:

      猜你喜欢
      • 2018-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-24
      • 2021-11-30
      • 1970-01-01
      相关资源
      最近更新 更多