2015-04-17 39 views
0

我正在使用log4net,試圖在我的單元測試中獲得日誌記錄。如果我手動撥打電話爲什麼log4net XmlConfigurator屬性不適用於我的單元測試

log4net.Config.XmlConfigurator.Configure(); 

既然這樣,那似乎消除了所有「不良配置,配置位置」問題。

它的工作原理,但有大量的測試類,所以這是不好的。

我加

[assembly: log4net.Config.XmlConfigurator(Watch=true)] 

到我的測試項目的集信息,但是當我運行(通過本地MSTest的,或ReSharper的測試運行),我沒有得到任何記錄。

幫助?

+0

來完成整個測試項目能澄清你在哪裏添加的'[assembly'線?你是否將它添加到實際的課堂中? – matth

+0

它在屬性文件夾中的assemblyinfo.cs中 –

回答

0

Source

[AssemblyInitialize()] 
public static void MyTestInitialize(TestContext testContext) 
{ 
// Take care the log4net.config file is added to the deployment files of the testconfig 
FileInfo fileInfo; 
string fullPath = Path.Combine(System.Environment.CurrentDirectory, "log4net.config"); 
fileInfo = new FileInfo(fullPath); 
1

,因爲它說的documentation for assembly attributes

因此,如果您使用的配置屬性,您必須調用log4net的 允許它讀取屬性。對 的簡單調用LogManager.GetLogger將導致調用程序集 上的屬性被讀取和處理。 因此,在應用程序啓動過程中儘可能早地進行日誌記錄 ,並且必須在任何外部程序集加載並調用之前確定。

由於單元測試運行加載測試組件,以便找到和測試,它是不可能在單元測試項目中使用的組件屬性初始化log4net的,你將不得不使用XmlConfigurator

編輯:as linked由OP評論這可以在一個地方使用AssemblyInitializeAttribute

+0

我沒有把它作爲一個需求來讀取,但是顯然你不能在加載之前發生的部件上做任何日誌記錄。以某種方式加載程序集會阻止log4net讀取程序集屬性? –

+0

是的,通常在主程序集的啓動代碼中,您將調用LogManager來加載程序集屬性。一旦完成,隨後加載的程序集將能夠記錄。對於單元測試項目,測試運行器將加載包含單元測試的程序集,因此測試運行器是主要程序集 - 並且不可能讓測試運行器讀取屬性,並且到時候包含測試的程序集加載的時間似乎已經太晚,無法讀取屬性。 – stuartd

+0

我找到了http://blog.developerslog.net/?p=61,我可能會使用它,因爲每個程序集仍然只有一次。 –

相關問題