2016-08-23 37 views
1

所以我已經做了一些四處尋找。我發現的大多數線程似乎都與想要在其實際測試中運行log4net的人有關。這意味着他們想要在他們的測試類中記錄日誌條目我不想從我的實際測試中記錄日誌條目。但我確實希望從我測試的代碼中獲得預期的日誌條目。這是我第一次使用Log4net。如果我自己運行代碼,那麼日誌條目就可以工作。如果我運行一個測試,儘管沒有日誌條目。我猜它沒有正確初始化,或者我沒有在我的UnitTest中正確安裝log4net(在appconfig或程序集中)。這是一個MVC 5應用程序。這是一個基本的例子。Log4net不能使用NUnit測試

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"); 
    } 

所以,我已經很明顯簡化了這一討論開始。但是當我運行我的實際測試時,我的測試通過了,價值和結果都是他們應該做的。我從未在日誌中看到我剛剛測試的方法的日誌條目。我確定我錯過了一些簡單的事情。任何幫助將不勝感激。謝謝!

回答

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>

然後,您可以添加一個<log4net>部分的<configuration>標籤。此文檔可以在here找到。

+0

那麼嘗試添加了我必須在WebConfig到我的AppConfig在我的單元測試。它仍然沒有工作。 – Puerto

+0

雖然我沒有參加大會。 // logger [程序集:log4net.Config.XmlConfigurator(ConfigFile =「Web.config」,Watch = true)]。讓我嘗試添加,以及我的UnitTest項目。 – Puerto

+0

確保您也有對UnitTest項目中的log4net程序集的引用。 –

1

我只想添加上面的答案。除了將UnitTest中的appconfig設置爲與應用程序webconfig相同(如果需要,還可以編輯日誌文件位置的值),還需要添加程序集條目,就像您已經爲應用程序添加的那樣(將web.config更改爲應用程序.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(); 

}