11

मेरे पास एक एएसपी.नेट एमवीसी प्रोजेक्ट का परीक्षण करने के लिए एक विजुअल स्टूडियो यूनिट टेस्ट प्रोजेक्ट है।एमएसटीएस्ट - मैं यूनिटटेस्ट प्रोजेक्ट के लिए log4net कैसे प्रारंभ करूं?

विधानसभा स्तरीय जोड़ना log4net.Config.XmlConfigurator AssemblyInfo.cs को विशेषता काम नहीं करता है और इतने पर अन्य लोगों ने पाया है कि वे log4net.Config.XmlConfigurator.Configure();

सवाल यह है कि, यह कैसे एक के लिए किया जा सकता है के लिए एक सीधा कॉल का उपयोग करना अध्याय परीक्षा? कक्षा विधि पर Microsoft.VisualStudio.TestTools.UnitTesting.AssemblyInitialize विशेषता का उपयोग करने का उत्तर काम नहीं करता है।

मेरे लिए, इस कोड के परिणामस्वरूप आउटपुट विंडो और परीक्षण सत्र बम में लॉग इन InvalidOperationException में परिणाम हुआ।

[TestClass] 
public sealed class Startup 
{ 
    [AssemblyInitialize] 
    public void Configure() 
    { 
     System.Diagnostics.Debug.Write("Microsoft.VisualStudio.TestTools.UnitTesting.AssemblyInitialize"); 
    } 
} 

प्रलेखन पढ़ना, MSDN ASP.NET के लिए परीक्षण परियोजनाओं पर AssemblyInitialize उपयोग करने के लिए नहीं है, क्योंकि वे एक बार से अधिक कहा जा सकता है कहते हैं।

तो यह कैसे किया जा सकता है ताकि लॉग परीक्षण किसी भी परीक्षण से पहले कॉन्फ़िगर किया गया हो?

+2

क्या मैं लॉग 4नेट के लिए एक अमूर्तता का उपयोग करके एक और दृष्टिकोण सुझा सकता हूं, आईबॉगर जैसे कुछ डीबग, जानकारी, चेतावनी इत्यादि को परिभाषित करता है .. इस तरह, आप आईएलओगर के लिए अलग-अलग कार्यान्वयन प्रदान कर सकते हैं, एक लॉग लॉगनेट का उपयोग करके वास्तविक लॉगिंग करने के लिए और आपके वास्तविक अनुप्रयोग में उपयोग किया जाना चाहिए, और अन्य कुछ ऐसा है जैसे InMemoryLogger जो यूनिटटेस्टिंग में उपयोग करने के लिए बहुत आसान हो सकता है। फिर भी आप इलोगर का मॉक (moq का उपयोग कर सकते हैं), जो लॉग 4नेट का उपयोग करते समय संभव नहीं है। –

+0

आपका दृष्टिकोण बेहतर है। हालांकि मैं अमूर्त लॉगिंग करता हूं, मैं लॉगिंग के साथ DI नहीं करता, क्योंकि मुझे लॉगिंग घटक को स्विच करने की आवश्यकता नहीं है - वे वैसे भी कॉन्फ़िगर करने योग्य हैं - इसलिए यदि दिन आया तो लॉग 4नेट को जाना पड़ा, तो मैं बस रिकोड करता मेरा ILogger कारखाना। इस मामले में, मैं सिर्फ डीबगर में अपने लॉगिंग स्टेटमेंट देखना चाहता था। –

उत्तर

22

उत्तर यह था कि मैं AssemblyInitialize का गलत उपयोग कर रहा था।

एक बार जब मैं पहली मौका अपवादों पर रोक लगाने के लिए डीबगर सेट करता था तो मैं यह पढ़ने में सक्षम था कि मेरी विधि स्थिर नहीं थी और मैंने TestContext को स्वीकार करने वाले पैरामीटर को नहीं जोड़ा।

यदि आप मुझसे पूछें तो विधि को एक निश्चित तरीके से होना चाहिए, तो एक विशेषता का एक सुंदर क्रैपी उपयोग। बहुत खोज योग्य नहीं है।

वैसे भी, यह काम करता है:

[TestClass] 
public static class Startup 
{ 
    [AssemblyInitialize] 
    public static void Configure(TestContext tc) 
    { 
     log4net.Config.XmlConfigurator.Configure(); 
    } 
} 

सलाह के बारे में ASP.NET परीक्षा के लिए इस का उपयोग करने के लिए नहीं है, यह घास। यह एक से अधिक बार चला सकता है लेकिन इससे कोई फर्क नहीं पड़ता।

संबंधित मुद्दे