2013-01-11 11 views
7

से चलाते समय लॉग 4नेट कॉन्फ़िगरेशन फ़ाइल नहीं ढूंढ सकता है। हम .NET 4.0 के तहत चल रहे हमारी व्यावसायिक परत के लिए इकाई परीक्षण लिख रहे हैं। व्यापार परत एक सीधी सी # कक्षा पुस्तकालय है जो आमतौर पर एसओएपी और आरईएसटी वेब सेवाओं के भीतर चलती है। लॉगिंग के लिए हमारा एप्लिकेशन एक अलग रैपर असेंबली के भीतर log4net का उपयोग करता है। लॉगिंग असेंबली में सी # कोड में एक असेंबली जानकारी निर्देश है जो लॉग 4नेट को कॉन्फ़िगरेशन फ़ाइल का नाम बताता है, एक ला -विजुअल स्टूडियो/माइक्रोसॉफ्ट टेस्ट फ्रेमवर्क

[असेंबली: log4net.Config.XmlConfigurator (ConfigFile = "AcmeLogging.config", Watch = true) ]

रैपर के माध्यम से log4net प्रारंभ करना वेब सेवाओं में ठीक काम करता है। जब हम इसे हमारी यूनिट टेस्ट असेंबली से प्रारंभ करते हैं तो यह कॉन्फ़िगरेशन फ़ाइल नहीं दिखता है। Configuratino फ़ाइल निष्पादन निर्देशिका में प्रतिलिपि बनाने के गुणों के माध्यम से कॉन्फ़िगर किया गया है, और हम इसे bin \ debug निर्देशिका में देखते हैं। एक ही फ़ोल्डर में से चल रहे लॉगिंग असेंबली का उपयोग कर एक त्वरित कंसोल परीक्षण प्रोग्राम ठीक काम करता है। उत्सुक बात यह है कि व्यवहार की समस्याएं अस्थायी हैं, और अलग-अलग डेवलपर्स मशीनों पर अलग-अलग समय पर पॉप अप होती हैं और किसी भी निर्धारिक तरीके से ठीक नहीं हो सकती हैं।

आवरण विधानसभा कोड के माध्यम से कदम, log4netLogManager.GetLogger() कॉल सही ढंग से वापस जाने के लिए प्रकट होता है, लेकिन() log.Logger.Repository.GetAppenders द्वारा दिया appenders की सूची खाली है। चूंकि यह गलत व्यवहार समान है कि फ़ाइल Bin \ Debug फ़ोल्डर में है या नहीं, हम मानते हैं कि यह फ़ाइल नहीं देख रहा है।

माइक्रोसॉफ्ट टेस्ट फ्रेमवर्क में लॉग 4नेट चलाने के बारे में जो कुछ भी हम खो रहे हैं उसके बारे में कोई संकेत बहुत सराहना की जाएगी।

उत्तर

8

यूनिट परीक्षण इस तथ्य में अद्वितीय हैं कि यदि आपको अपने यूनिट परीक्षणों में कॉन्फ़िगरेशन फ़ाइलों की आवश्यकता है तो आपको उन्हें तैनाती आइटम के रूप में शामिल करने की आवश्यकता है।

[TestClass] 
[DeploymentItem("hibernate.cfg.xml")] 
public class AsyncForwardingAppenderTest 
{ 

} 

Deployment के अलावा विशेषता करने की जरूरत है अपने परीक्षण सेटिंग में तैनाती सक्षम करें: यहाँ मैं कैसे अपने परीक्षण वर्ग के भीतर ऐसा करने का एक उदाहरण है। ऐसा करने के लिए टेस्ट-> टेस्ट सेटिंग्स संपादित करें-> पर जाएं। फिर दाईं ओर Deployment क्षेत्र पर क्लिक करें। चेकबॉक्स Enable Deployment पर क्लिक करें।

ऐसा करने के बाद और अपना परीक्षण चलाने के बाद आपकी कॉन्फ़िगरेशन फ़ाइल आपके परीक्षण परिणाम फ़ोल्डर में स्थित होनी चाहिए। TestResults \ username_machine दिनांक टिकट \ आउट। अगर आपकी कॉन्फ़िगरेशन फ़ाइल इस फ़ोल्डर में स्थित नहीं है तो यह काम नहीं करेगी। यही वह है जो परिनियोजन इटैम विशेषता करता है। यह आउट फ़ोल्डर में फ़ाइल चिपकता है।

यदि आप प्रत्येक टेस्ट क्लास पर परिनियोजन इटैम विशेषता शामिल नहीं करना चाहते हैं तो मैंने बेस टेस्ट क्लास बनाने के लिए किया था कि log4net का उपयोग करने वाले सभी परीक्षणों को प्राप्त करने और इसे परिनियोजन इटैम विशेषता के साथ चिह्नित करने के लिए किया गया है।

+0

यह _exactly_ हमें क्या चाहिए था, इससे पूरी टीम बहुत खुश होगी। आपका बहुत बहुत धन्यवाद। मैं इस उत्तर के लिए मतदान करना चाहता हूं, लेकिन ऐसा करने के लिए पर्याप्त SO गतिविधि नहीं है - लेकिन भविष्य के पाठकों को इस उत्तर के लिए इसे एक अतिरिक्त वोट माना जाना चाहिए। –

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