c# - Unit tests logged (or run) multiple times -


मेरे पास यह सरल परीक्षण है:

  सुरक्षित रीडॉनली इलोग लॉगर = लॉग मैनेजर। गेटोॉगगर (मेथडबेज) .GetCurrentMethod () ReflectedType)। निजी स्थिर इंट गणना = 0; [टेस्ट] सार्वजनिक शून्य TestConfigured सफलतापूर्वक () {logger.Debug ("परीक्षण विधि में" + गणना ++); }  

log4net इस तरह सेट है:

  [TestFixtureSetUp] सार्वजनिक शून्य सेटअप () {log4net.Config.BasicConfigurator.Configure (); }  

समस्या यह है, कि अगर मैं एक बार में nUnit में इस परीक्षण को चलाता हूं, तो मुझे आउटपुट (अपेक्षित) मिलता है:

  1742 [TestRunnerThread] DEBUG टेस्ट सोमिंग (रिक्त) - परीक्षण विधि0 में  

लेकिन अगर मैं nUnit.exe पर फिर से (या अधिक) रन को दबाता हूं तो मुझे निम्न मिलता है:

  टेस्ट सोमिंग (रिक्त) - परीक्षा विधि 1 में  

और इसी तरह (अगर मैं इसे 5 चलाता हूं) 1 9 42 [टेस्ट रीनर] डेब्यूग टेस्ट टेस्ट सोमलिंग (रिक्त) - टेस्ट मेथड 1 1742 [टेस्ट रीनर टे्रफ] बार, मुझे 5 पुनरावृत्त लाइनें मिलेंगी)। अब, अगर मैं एक ही परीक्षा को अकेले पुनर्सहर्पर से चलाता हूं तो आउटपुट ठीक है और दोहरा नहीं। हालांकि, अगर मैं एक ही कक्षा में 2 अन्य परीक्षणों के साथ इस परीक्षण को चलाता हूं, तो आउटपुट तीन बार दोहराया जाता है।

मैं पूरी तरह से भ्रमित हूँ यहां पर क्या हो रहा है?

लॉग4नेट को प्रत्येक परीक्षण चलाने पर पुनः आरंभ किया जा रहा है, और एपेन्डर (एस) प्रत्येक बार जोड़ा। मुझे संदेह है कि ReSharper व्यवहार प्रदर्शित नहीं करता है क्योंकि यह प्रत्येक बार (रीपरपर टेस्ट रनर) एक नई प्रक्रिया शुरू करता है, जबकि NUnit GUI नहीं करता।

मेरे पास अतीत में इसके विभिन्न स्वाद थे, लेकिन काफी कुछ समय पहले मैंने log4net को आरम्भ करने के लिए "SetupFiexture" का उपयोग किया है (अन्य चीजों के बीच)।

  [SetupFixture] सार्वजनिक वर्ग UnitTestSuiteSetupTeardown {[Setup] सार्वजनिक शून्य सेटअप () {log4net.Config BasicConfigurator.Configure (); } [टायरडाउन] सार्वजनिक शून्य टारडाउन () {// टारडाउन सामान ...}}  

इनमें से एक परीक्षण विधानसभा में से एक को जोड़ें और सुनिश्चित करें कि कक्षा में कोई नाम स्थान नहीं है। यह आपके सभी परीक्षणों के लिए एक बार चलाया जाएगा जैसे कि विधानसभा में सभी परीक्षण। मुझे व्यक्तिगत रूप से समाधान स्तर पर इनमें से एक है और इसे प्रत्येक परीक्षा प्रोजेक्ट के लिंक के रूप में जोड़ें।

अपडेट

ऊपर दिए गए उदाहरण प्रश्न का अनुसरण करते हैं और मूल कॉन्फ़िगरेशन को सेट अप करता है मेरी वास्तविक SetUpFixture में मैं एक log4net कॉन्फ़िगरेशन फ़ाइल से log4net को इनिशियलाइज़ करता हूं (जो मैं फिर से समाधान स्तर पर संग्रहीत करता हूं और फिर सभी टेस्ट प्रोजेक्ट्स के लिए लिंक के रूप में जोड़ता हूं), जैसे

  [SetUpFixture] सार्वजनिक वर्ग UnitTestSuiteSetupTeardown { [सेट अप] सार्वजनिक शून्य सेटअप () {LogFactory.Configure (); } [टियरडाउन] सार्वजनिक शून्य टारडाउन () {// टारडाउन सामान ...}}  

और एक नमूना लॉगफैक्टर प्रकार वर्ग।

  सार्वजनिक स्थिर वर्ग LogFactory {सार्वजनिक कॉन्स्ट स्ट्रिंग DefaultConfigFileName = "log4net.config"; स्थिर ILog GetLogger (कॉलिंग टाइप टाइप करें) {नया लॉग 4 नेटलॉगर (लॉगमैनेजर। गैटलॉगगर (कॉलिंग टाइप)); } सार्वजनिक स्थिर शून्य कॉन्फ़िगर () {प्रकार प्रकार = प्रकार (LogFactory); फ़ाइलइन्फो विधानसभा डायरेक्टरी = विधानसभा.गेटकोडबेस डायरेक्टरी (प्रकार); FileInfo configFile = नया FileInfo (पथ। Combine (assemblyDirectory.FullName, DefaultConfigFileName)); XmlConfigurator.ConfigureAndWatch (configFile); Log4net.ilog लॉग = LogManager.GetLogger (प्रकार); log.ToString (); }}  

Comments

Popular posts from this blog

windows - Heroku throws SQLITE3 Read only exception -

lex - Building a lexical Analyzer in Java -

python - rename keys in a dictionary -