簡體   English   中英

Log4net無法與NUnit測試一起使用

[英]Log4net not working with NUnit tests

所以我做了一些環顧四周。 我發現大多數線程似乎與想要在實際測試中運行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");
    }  

因此,我顯然已將其簡化了討論。 但是,當我運行實際測試時,我的測試通過了,其值和結果均應達到預期。 我只是從未在日志中看到我剛剛測試過的方法的日志條目。 我確定我缺少簡單的東西。 任何幫助將不勝感激。 謝謝!

如果在主項目的app.config中查找,則應該看到log4net config部分,該部分指定日志文件的位置。

首先,您需要像這樣將log4net添加到您的<configSections>

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

然后可以將<log4net>部分添加到<configuration>標記。 有關此文檔,請參見此處

我只想添加以上答案。 除了在UnitTest中將appconfig設置為與Application 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();

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM