शून्य वापसी प्रकार / सबरूटीन पुरानी खबरें हैं। मैंने 8 साल की तरह (इस उत्तर के समय से, जब तक कि यह प्रश्न नहीं पूछा गया था) से पहले मैंने एक शून्य रिटर्न प्रकार (जब तक मैं बेहद आलसी हो रहा था) नहीं बना लिया।
इसके बजाय एक विधि की तरह:
public void SendEmailToCustomer()
Microsoft की int.TryParse () प्रतिमान का अनुसरण करने वाली विधि बनाएँ:
public bool TrySendEmailToCustomer()
हो सकता है कि आपके द्वारा लंबे समय से उपयोग में लाए जाने के लिए आपके द्वारा दी गई किसी भी जानकारी की आवश्यकता न हो, लेकिन अपना कार्य करने के बाद विधि की स्थिति को वापस करना कॉलर के लिए बहुत बड़ा उपयोग है।
इसके अलावा, बूल एकमात्र राज्य प्रकार नहीं है। कई बार ऐसा होता है जब पहले से निर्मित सबरूटीन वास्तव में तीन या अधिक विभिन्न राज्यों (गुड, नॉर्मल, बैड, आदि) को वापस कर सकता है। उन मामलों में, आप बस उपयोग करेंगे
public StateEnum TrySendEmailToCustomer()
हालांकि, जबकि कोशिश-प्रतिमान कुछ इस सवाल का जवाब देता है कि शून्य रिटर्न का परीक्षण कैसे किया जाता है, अन्य विचार भी हैं। उदाहरण के लिए, एक "टीडीडी" चक्र के दौरान / बाद में, आप "रिफैक्टरिंग" होंगे और नोटिस करेंगे कि आप अपनी विधि के साथ दो काम कर रहे हैं ... इस प्रकार "सिंगल रिस्पॉन्सिबिलिटी प्रिंसिपल" को तोड़ रहे हैं। ताकि पहले ध्यान रखा जाए। दूसरा, आपने एक निर्भरता को निष्क्रिय कर दिया होगा ... आप "स्थायी" डेटा छू रहे हैं।
यदि आप विधि-में-प्रश्न में डेटा एक्सेस सामान कर रहे हैं, तो आपको n-tier'd या n-layer'd आर्किटेक्चर में रिफ्लेक्टर करने की आवश्यकता है। लेकिन हम यह मान सकते हैं कि जब आप कहते हैं "तार फिर एक डेटाबेस में डाले जाते हैं", तो आप वास्तव में मतलब है कि आप एक व्यापार तर्क परत या कुछ और कह रहे हैं। हां, हम मान लेंगे।
जब आपकी वस्तु को त्वरित किया जाता है, तो अब आप समझते हैं कि आपकी वस्तु पर निर्भरता है। यह तब होता है जब आपको यह तय करने की आवश्यकता होती है कि क्या आप ऑब्जेक्ट पर, या विधि पर निर्भरता इंजेक्शन करने जा रहे हैं। इसका मतलब है कि आपके कंस्ट्रक्टर या विधि-में-प्रश्न को एक नए पैरामीटर की आवश्यकता है:
public <Constructor/MethodName> (IBusinessDataEtc otherLayerOrTierObject, string[] stuffToInsert)
अब जब आप अपने व्यवसाय / डेटा टियर ऑब्जेक्ट के एक इंटरफ़ेस को स्वीकार कर सकते हैं, तो आप इसे यूनिट टेस्ट के दौरान मॉक आउट कर सकते हैं और "निर्भरता" एकीकरण परीक्षण का कोई निर्भरता या भय नहीं है।
तो आपके लाइव कोड में, आप एक वास्तविक IBusinessDataEtc
ऑब्जेक्ट में पास होते हैं । लेकिन आपके यूनिट टेस्टिंग में, आप MOCK IBusinessDataEtc
ऑब्जेक्ट में पास होते हैं । उस Mock में आप नॉन-इंटरफ़ेस प्रॉपर्टीज़ जैसे int XMethodWasCalledCount
या कुछ और शामिल कर सकते हैं जिसका स्टेट (s) इंटरफ़ेस मेथड्स कहे जाने पर अपडेट किया जाता है।
तो आपका यूनिट टेस्ट आपके मेथड (ओं) -प्रश्न से गुजरेगा, जो भी तर्क उनके पास हैं, और एक या दो, या आपके द्वारा चुने गए तरीकों को अपने IBusinessDataEtc
ऑब्जेक्ट में सेट करें । जब आप अपने यूनिट टेस्ट के अंत में अपने दावे करते हैं तो आपके पास अभी परीक्षण करने के लिए कुछ चीजें हैं।
- "सबरूटीन" की स्थिति जो अब एक कोशिश-प्रतिमान विधि है।
- आपकी नकली
IBusinessDataEtc
वस्तु की स्थिति।
निर्माण-स्तर पर निर्भरता इंजेक्शन विचारों के बारे में अधिक जानकारी के लिए ... जैसा कि वे यूनिट परीक्षण से संबंधित हैं ... बिल्डर डिजाइन पैटर्न में देखें। यह आपके पास मौजूद प्रत्येक मौजूदा इंटरफ़ेस / क्लास के लिए एक और इंटरफ़ेस और क्लास जोड़ता है, लेकिन वे बहुत छोटे होते हैं और बेहतर यूनिट-परीक्षण के लिए बड़ी कार्यक्षमता बढ़ाते हैं।