मैंने सवाल का मजाक उड़ाया क्योंकि मुझे यकीन है कि "यह निर्भर करता है," लेकिन मेरे पास कुछ विशिष्ट प्रश्न हैं।
सॉफ्टवेयर में काम करना, जिसमें निर्भरता की कई गहरी परतें हैं, मेरी टीम प्रत्येक कोड मॉड्यूल को नीचे से निर्भरता से अलग करने के लिए काफी व्यापक रूप से मॉकिंग का उपयोग करने की आदी हो गई है।
इसलिए मुझे आश्चर्य हुआ कि रॉय ओशेरोव ने इस वीडियो में सुझाव दिया था कि आपको केवल 5% समय का उपयोग करके कुछ मजाक करना चाहिए। मुझे लगता है कि हम कहीं 70-90% के बीच बैठे हैं। मैंने समय-समय पर इसी तरह के अन्य मार्गदर्शन देखे हैं ।
मुझे यह परिभाषित करना चाहिए कि मैं "एकीकरण परीक्षणों" की दो श्रेणियां क्या मानता हूं जो इतनी अलग हैं कि उन्हें वास्तव में अलग-अलग नाम दिए जाने चाहिए: 1) इन-प्रोसेस परीक्षण जो कई कोड मॉड्यूल और 2 को एकीकृत करते हैं) आउट-ऑफ-प्रक्रिया परीक्षण जो बात करते हैं डेटाबेस, फ़ाइल सिस्टम, वेब सेवाओं, आदि के लिए यह # 1 प्रकार है कि मैं के साथ संबंध है, परीक्षण जो सभी प्रक्रिया में कई कोड मॉड्यूल एकीकृत करते हैं।
मैंने जो समुदाय मार्गदर्शन पढ़ा है, उनमें से अधिकांश का सुझाव है कि आपको बड़ी संख्या में अलग-थलग, महीन दाने वाली इकाई परीक्षण और कम संख्या में मोटे-दाने वाले अंत-से-अंत एकीकरण परीक्षण पसंद करने चाहिए, क्योंकि इकाई परीक्षण आपको सटीक प्रतिक्रिया देते हैं जहां पर प्रतिगमन बनाए जा सकते हैं, लेकिन मोटे परीक्षण, जो स्थापित करने के लिए बोझिल हैं, वास्तव में सिस्टम के अधिक अंत-टू-एंड कार्यक्षमता को सत्यापित करते हैं।
इसे देखते हुए, कोड की इन अलग-अलग इकाइयों को अलग करने के लिए मॉकिंग का बार-बार उपयोग करना आवश्यक लगता है।
एक वस्तु मॉडल को निम्नानुसार दिया गया है:
... यह भी विचार करें कि हमारे आवेदन की निर्भरता गहराई इस छवि में फिट होने की तुलना में बहुत अधिक गहराई तक जाती है, ताकि 2-4 परत और 5-13 परत के बीच कई परतें एन हो।
अगर मैं यूनिट # 1 में किए जा रहे कुछ सरल तार्किक निर्णय का परीक्षण करना चाहता हूं, और यदि प्रत्येक निर्भरता कोड मॉड्यूल में निर्माता-इंजेक्ट है जो इस पर निर्भर करता है कि, जैसे, 2, 3, और 4, निर्माता 1 में इंजेक्ट किए गए हैं। छवि, मैं बहुत से 2, 3 और 4 के नकली को 1 में इंजेक्ट करूंगा।
अन्यथा, मुझे 2, 3, और 4 के ठोस उदाहरणों का निर्माण करने की आवश्यकता होगी। यह केवल कुछ अतिरिक्त टाइपिंग की तुलना में अधिक कठिन हो सकता है। अक्सर 2, 3, और 4 में कंस्ट्रक्टर की आवश्यकताएं होंगी जो संतुष्ट करने के लिए चुनौतीपूर्ण हो सकती हैं और ग्राफ के अनुसार (और हमारी परियोजना की वास्तविकता के अनुसार), मुझे 13 के माध्यम से एन के ठोस उदाहरणों का निर्माण करने की आवश्यकता होगी 2, 3, और 4।
यह स्थिति तब और अधिक चुनौतीपूर्ण हो जाती है जब मुझे कुछ निश्चित तरीके से व्यवहार करने के लिए 2, 3, या 4 की आवश्यकता होती है ताकि मैं # 1 में सरल तार्किक निर्णय का परीक्षण कर सकूं। मुझे आवश्यक तरीके से व्यवहार करने के लिए 2, 3, या 4 प्राप्त करने के लिए एक ही बार में पूरे ऑब्जेक्ट ग्राफ / ट्री के बारे में समझने और "मानसिक रूप से कारण" की आवश्यकता हो सकती है। यह अक्सर बहुत आसान लगता है myMockOfModule2.Setup (x => x.GoLeftOrRight) ()) रिटर्न (नया अधिकार ()); उस मॉड्यूल का परीक्षण करने के लिए जब मॉड्यूल 2 सही होने के लिए कहता है, तो अपेक्षित रूप से प्रतिक्रिया करता है।
अगर मुझे 2 ... N ... 13 सभी के ठोस उदाहरणों का परीक्षण करना था, तो परीक्षण सेटअप बहुत बड़े और ज्यादातर नकल वाले होंगे। परीक्षण विफलताओं, प्रतिगामी विफलताओं के स्थानों को इंगित करने का एक बहुत अच्छा काम नहीं कर सकते हैं। टेस्ट स्वतंत्र नहीं होंगे ( एक अन्य सहायक लिंक )।
दी गई, बातचीत के आधार पर, निचली परत के परीक्षण के बजाय, राज्य-आधारित करना अक्सर उचित होता है, क्योंकि उन मॉड्यूलों में शायद ही कोई और निर्भरता हो। लेकिन ऐसा लगता है कि किसी भी मॉड्यूल को सबसे नीचे से अलग करने के लिए परिभाषा द्वारा मॉकिंग लगभग आवश्यक है।
इस सब को देखते हुए, क्या कोई मुझे बता सकता है कि मुझे क्या याद आ रहा है? क्या हमारी टीम मॉक ओवर कर रही है? या शायद विशिष्ट इकाई परीक्षण मार्गदर्शन में कुछ धारणा है कि अधिकांश अनुप्रयोगों में निर्भरता की परतें उथली हो जाएंगी कि सभी कोड मॉड्यूल को एक साथ एकीकृत करने के लिए परीक्षण करना वास्तव में उचित है (हमारे मामले को "विशेष" बनाकर)? या शायद अलग तरह से, क्या हमारी टीम हमारे बंधे हुए संदर्भों को पर्याप्त रूप से सीमित नहीं कर रही है?
Or is there perhaps some assumption in typical unit testing guidance that the layers of dependency in most applications will be shallow enough that it is indeed reasonable to test all of the code modules integrated together (making our case "special")?
<- यह।