Log4net 不适用于 NUnit 测试

Log4net not working with NUnit tests

所以我四处看了看。我发现的大多数线程似乎都与希望在实际测试中使用 运行 log4net 的人有关。这意味着他们希望在他们的测试中有日志条目 class。我不想要实际测试中的日志条目。但我确实想要我正在测试的代码中的预期日志条目。这是我第一次使用 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");
    }  

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

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

您首先需要像这样将 log4net 添加到您的 <configSections>

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

然后您可以将 <log4net> 部分添加到 <configuration> 标签。可在 here.

中找到相关文档

我只是想补充上面的答案。除了在您的 UnitTest 中将 appconfig 设置为与您的应用程序 webconfig 相同(如果需要,编辑日志文件位置的值)您还需要添加程序集条目,就像您已经为您的应用程序添加的那样(更改 web.config app.config 在我的例子中)。

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

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

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

}