मूल कोडरश परीक्षण टेम्प्लेट। विधि कॉल के क्रम का परीक्षण

हमारे काम में हमें बहुत सारे परीक्षण लिखने पड़ते हैं। जल्दी से ऐसा करने के लिए, हम कोडरश टेम्पलेट्स का उपयोग करते हैं। इस लेख में, हम आपको बताएंगे कि परीक्षण के लिए कस्टम टेम्पलेट कैसे बनाएं। एक उदाहरण के रूप में, आइए निम्न कार्य करें: संरक्षित वर्ग विधियों को कॉल के सही क्रम का परीक्षण करने के लिए। हम केवल NMU और जैसे पुस्तकालयों के उपयोग के बिना NUnit का उपयोग करेंगे।









परीक्षण करने की वस्तु



तो, चलिए प्रयोगात्मक वस्तु से शुरू करते हैं। हम एक सरल वर्ग लिखेंगे जिसमें कई विधियाँ होंगी और उनके कॉल का एक विशिष्ट क्रम होगा।

public class SimpleClass { public void DoAction() { BeforeAction(); try { DoActionCore(); } finally { AfterAction(); } } protected virtual void BeforeAction() { } protected virtual void AfterAction() { } protected virtual void DoActionCore() { } }
      
      







इस वर्ग में, आपको यह सत्यापित करने की आवश्यकता है कि DoAction पद्धति को कॉल करने के परिणामस्वरूप , PreAction , DoActionCore और AfterAction विधियों को वांछित अनुक्रम और आवश्यक संख्या में निष्पादित किया जाना चाहिए।



परीक्षण सिंपलक्लास वर्ग के वंशज लिखने पर आधारित होगा, जो एक निश्चित पद्धति को कॉल करते समय रिकॉर्ड करेगा कि यह विधि कहा जाता था। सादगी के लिए, हम एक ट्रेस-ऑब्जेक्ट के रूप में एक नियमित स्ट्रिंग लेते हैं और वहां बुलाया विधि का नाम जोड़ते हैं। परीक्षण में, हम परिणामी स्ट्रिंग को अपेक्षित परिणाम के साथ सत्यापित करेंगे।



TestClassName जैसे वर्गों के लिए एक नामकरण सम्मेलन को परिभाषित करें। यह परीक्षणों के लिए एक टेम्पलेट के लेखन को सरल करेगा।



खाका अनुकूलन



कोडरश टेम्पलेट्स के बारे में संक्षेप में: वे आपको नाम प्रतिस्थापन, स्वरूपण, आदि के लिए कुछ नियमों का पालन करते हुए, संपादक में अक्सर उपयोग किए जाने वाले कोड स्निपेट डालने की अनुमति देते हैं। वे कोड-स्निपेट्स के समान हैं, लेकिन उनकी बड़ी बुद्धिमत्ता में उनसे भिन्न हैं, कई लाभ प्रदान करते हैं, जैसे कि एप्लिकेशन संदर्भ, मौजूदा कोड का विश्लेषण करने की क्षमता, कमांड, लाइन प्रोवाइडर, फ़ील्ड, लिंक और बहुत कुछ।



अब हम ट्रेस स्ट्रिंग वाले वर्ग के वारिस के लिए अपना स्वयं का टेम्पलेट लिखना शुरू करते हैं। सेटिंग्स विंडो खोलें, संपादक पर जाएं -> टेम्पलेट समूह, NUnit के लिए विकल्पों का समूह। ध्यान दें कि CodeRush में पहले से ही NUnit परीक्षण लिखने के लिए टेम्पलेट्स का पूर्वनिर्धारित सेट है, लेकिन हमें एक और एक बनाने की आवश्यकता है।







अंजीर। 1 - NUnit के लिए एक नया टेम्पलेट बनाना



टेम्प्लेट को एक छोटा नाम दें, उदाहरण के लिए, स्टु-क्लास से स्टु (लिखें) और टेम्प्लेट का मुख्य भाग लिखें। हम टेम्पलेट को इस तरह से डिज़ाइन करेंगे कि जब वह सक्रिय हो जाए, तो स्रोत वर्ग का नाम क्लिपबोर्ड में संग्रहीत किया जाएगा और चिपकाने के बाद, एक कोड बनाया जाएगा जो नामों के लिए ऊपर वर्णित नियमों को दर्शाता है।

 #region Test«Paste» (stub class) public class Test«Paste» :«Paste» { string trace = string.Empty; public Test«Paste»(«Caret») : base() { } public string Trace { get { return trace; } set { trace = value; } } } #endregion
      
      









अंजीर। 2 - पूर्वनिर्धारित आदेशों का उपयोग करके टेम्पलेट के शरीर को लिखना



टेम्प्लेट लिखते समय, हम कमांड्स के पूर्वनिर्धारित सेट का उपयोग करते हैं, उन्हें उनकी सूची से चुनते हैं। यहाँ ऐसी टीमें हैं "पेस्ट" और "केयर"।





अब यह बताना महत्वपूर्ण है कि यह टेम्प्लेट कहाँ चल सकता है। ऐसा करने के लिए, आवश्यक मान सेट करके उपयोग उपयोग मापदंडों को कॉन्फ़िगर करें। इसके लिए Line.OnEmptyLine पैरामीटर निर्दिष्ट करें।







अंजीर। 3 - टेम्पलेट के उपयोग के क्षेत्रों को परिभाषित करना



पहले के समान, हम एक एट्रैड (ट्रेस जोड़ें) टेम्प्लेट को एक विधि में ट्रेस स्ट्रिंग जोड़ने के लिए लिखते हैं।

 trace += "->«Member»"; «Caret»
      
      





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







अंजीर। 4 - ट्रेस स्ट्रिंग डालने के लिए टेम्प्लेट



टेम्प्लेट तैयार हैं। यह कहा जाना चाहिए कि आप xml फ़ाइल में स्वयं-निर्मित लोगों सहित टेम्पलेट निर्यात कर सकते हैं। और, यदि आवश्यक हो, तो पहले से बनाई गई फ़ाइल से आयात करके उन्हें पुन: उपयोग करें, जो मैन्युअल रूप से फिर से प्रवेश करने से बचता है।



हम जल्दी से परीक्षण लिखते हैं



यह सब कैसे काम करता है? आइए SimpleClass के लिए एक परीक्षण लिखने की कोशिश करें।



हमें परीक्षणों के लिए एक इनहेरीटर वर्ग की आवश्यकता है। SimpleClass के नाम को क्लिपबोर्ड पर कॉपी करें और stu टाइप करें। अनुगामी वर्ग के लिए एक ट्रेस संपत्ति वाले टेम्पलेट को कर्सर स्थान पर डाला जाता है।







अंजीर। 5 - टेम्पलेट सक्रियण और कोड सम्मिलन





अब प्रत्येक विधि के लिए ट्रेस जानकारी जोड़ें जो हमें रुचती है। ऐसा करने के लिए, हम इन विधियों को फिर से करेंगे। विज़ुअल स्टूडियो में, इसके लिए "ओवर" टाइप करें, फिर स्पेसबार को दबाएं और ड्रॉप-डाउन सूची से वांछित विधि नामों का चयन करें, जबकि इंटेलीजेंस को धन्यवाद देते हुए कि वे अपने नाम को याद न रखें। नतीजतन, सभी आवश्यक विधियां ओवरराइड हो जाती हैं और अब तक वे बस आधार को कहते हैं।





अब हमारे एटीआर टेम्पलेट को शामिल करने का समय है। आइए इन तरीकों से गुजरें, ट्रेस स्ट्रिंग डालने के लिए टेम्पलेट को सक्रिय करें। नतीजतन, हमें ऐसे तरीके मिलते हैं जो कॉल के बाद ट्रेस प्रॉपर्टी में अपना नाम जोड़ देंगे।



 #region TestSimpleClass (stub class) public class TestSimpleClass : SimpleClass { string trace = string.Empty; public TestSimpleClass() : base() { } public string Trace { get { return trace; } set { trace = value; } } protected override void BeforeAction() { base.BeforeAction(); trace += "->BeforeAction"; } protected override void AfterAction() { base.AfterAction(); trace += "->AfterAction"; } protected override void DoActionCore() { base.DoActionCore(); trace += "->DoActionCore"; } } #endregion
      
      







नाम के अलावा, कॉल से संबंधित किसी भी अन्य जानकारी को ट्रेस ऑब्जेक्ट में जोड़ा जा सकता है, उदाहरण के लिए, कॉल पैरामीटर, आदि।





हम सीधे टेस्ट में लौटेंगे। हमारी कक्षा के परीक्षण समूह के लिए एक TextFixture बनाएँ। वैसे, इसके निर्माण को गति देने के लिए, आप अपना स्वयं का टेम्प्लेट भी लिख सकते हैं, जिसमें सेटअप और टियरडाउन के तरीके शामिल होंगे। हम अपने वंशज वर्ग का एक उदाहरण घोषित करते हैं, इसे आरंभ करते हैं और DoAction विधि के लिए एक परीक्षण लिखते हैं। परीक्षण में अपेक्षित परिणाम के साथ विधि को कॉल करने के बाद उत्तराधिकारी वर्ग की ट्रेस संपत्ति की तुलना करना शामिल होगा, जो कक्षा के संरक्षित तरीकों को कॉल के सही अनुक्रम को दर्शाता है।



 #region SimpleClassTests [TestFixture] public class SimpleClassTests { TestSimpleClass testClass; [SetUp] public void Setup() { testClass = new TestSimpleClass(); } [TearDown] public void Teardown() { testClass = null; } [Test] public void DoActionMethod() { testClass.Trace = string.Empty; testClass.DoAction(); string expectedTrace = "->BeforeAction->DoActionCore->AfterAction"; Assert.AreEqual(expectedTrace, testClass.Trace); } } #endregion
      
      







परीक्षण चलाएं। परिणाम प्राप्त किया जाता है - हमने यह सुनिश्चित किया कि वर्ग के अंदर सब कुछ उसी तरह से काम करे जैसा वह करना चाहिए।





अंत में, मैं यह कहना चाहता हूं कि ट्रेस स्ट्रिंग्स का उपयोग करने वाले दृष्टिकोण की कमियों में से एक यह है कि जब आप स्रोत कक्षाओं के कोड और उनमें कॉल के क्रम को बदलते हैं, तो आपको परीक्षणों को संशोधित करना होगा, या बल्कि, संदर्भ तार। इसलिए, मॉडरेशन में सब कुछ अच्छा है, और आप खुद तय करते हैं कि इस तरह की प्रैक्टिस कहां और कब करनी है।





सुविधाजनक परीक्षा पैटर्न बनाने के लिए शुभकामनाएँ!



All Articles