इकाई और एकीकरण के बीच परीक्षण अंतर: लघु, घटक, इकाई एकीकरण परीक्षण में एकीकरण


9

पिछले कुछ हफ्तों से मैं हमारी परीक्षा पद्धति में एक अंतर को भरने के लिए शोध कर रहा हूं। सरल शब्दों में इकाई परीक्षण बहुत छोटे हैं और पारंपरिक एकीकरण परीक्षण बहुत बड़े हैं।

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

स्पष्ट रूप Aसे नकली मान्यताओं के साथ इकाई परीक्षण अलगाव में Cपरीक्षण के लिए ठीक है A, लेकिन यह खुद मान्यताओं का परीक्षण नहीं करता है।

एक और संभावना के लिए इकाई परीक्षण जोड़ने के लिए है C। हालाँकि, यह आदर्श नहीं है, क्योंकि Aविकास के दौरान परीक्षणों को बदलने से Cहोने वाली मान्यताओं के साथ फेरबदल Aकरना अत्यधिक अनाड़ी होगा। वास्तव में Aडेवलपर के पास इकाई परीक्षणों C(जैसे बाहरी पुस्तकालय) तक पर्याप्त पहुंच नहीं हो सकती है ।

इसे और अधिक ठोस उदाहरण के साथ फ्रेम करने के लिए: मान लें कि यह एक नोड अनुप्रयोग है। A, और एक फ़ाइल (अन्य बातों के अलावा) को पढ़ने के लिए और पास की गई ऑब्जेक्ट में फ़ाइल सामग्री को संग्रहीत करने के लिए Bनिर्भर Cकरें C। पहले सभी फाइलें जो Cसंभालती हैं, वे छोटी हैं और महत्वपूर्ण अवरोध के बिना सिंक्रोनस को पढ़ा जा सकता है। हालाँकि, डेवलपर को Bपता चलता है कि उसकी फाइलें बहुत बड़ी हो रही हैं और उसे Cएक async रीड पर स्विच करना होगा। यह एक छिटपुट तुल्यकालन बग में परिणाम देता है A, जो अभी भी मान रहा Cहै कि फाइल तुल्यकालिक रूप से पढ़ रहा है।

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

मैंने केवल इस प्रकार के परीक्षण के लिए कुछ संदर्भ पाया है। छोटे , घटक एकीकरण परीक्षण , यूनिट एकीकरण परीक्षण में एकीकरण । यह औपचारिक TDD इकाई परीक्षण के बजाय BDD परीक्षण दिशा से कुछ हद तक संबंधित है ।

मैं इस परीक्षण अंतर को कैसे भरूं? विशेष रूप से - मैं इस तरह के परीक्षण कहां करूं? मैं के आदानों कैसे नकली है Aऔर C"मिनी" एकीकरण परीक्षण के लिए? और इन परीक्षणों और इकाई परीक्षणों के बीच परीक्षण संबंधी चिंताओं को अलग करने में कितना प्रयास किया जाना चाहिए? या परीक्षण अंतर को भरने के लिए एक बेहतर तरीका है?


1
क्या आपने मॉड्यूल एसी के संस्करण और कुछ प्रकार की निर्भरता प्रबंधन का उपयोग करने पर विचार किया है?
चमत्कारिक


1
@gnat टिप के लिए धन्यवाद। मैंने सवाल को कम अस्पष्ट बना दिया।
mjhm

@miraclixx आपके सुझाव के लिए धन्यवाद। क्या आप विस्तृत कर सकते हैं? अगर आपको ब्लॉग से कोई मतलब है। nodejitsu.com/package-dependencies-done-right - मुझे लगता है कि यह एक अलग समस्या है जो मैं इसके बारे में पूछ रहा हूं। जिन घटकों का मैं उल्लेख कर रहा हूं वे आम तौर पर एक नोड मॉड्यूल के रूप में स्वतंत्र रूप से संस्करण के लिए बहुत छोटे हैं - उदाहरण के लिए एक मॉडल या नियंत्रक घटक फ़ाइल। इसके अतिरिक्त संस्करण केवल विशिष्ट समस्याओं के लिए स्पष्ट परीक्षण के बजाय सुरक्षा और विफलताओं के स्रोतों के बारे में संकेत देता है।
mjhm

जवाबों:


6

यह मुझे प्रतीत होता है कि आपको अपने घटकों के साथ एक मूलभूत समस्या है।

C को वह करना चाहिए जो C को करना है, और परीक्षण किया जाना चाहिए, प्रलेखित किया जाना चाहिए और ऐसा करने के लिए डिज़ाइन किया गया है। जब आपके पास एक ऐसी स्थिति होती है जहां सी को "बी क्या चाहिए" के लिए डिज़ाइन किया गया है तो आपके पास एक अपमानजनक संबंध है, एक वह जो ए के आने पर बहुत स्पष्ट हो जाता है और चाहता है कि सी कुछ अलग हो।

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

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


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

मुझे लगता है कि आप अपने खुद के एकीकरण परीक्षणों उन्हें इकाई परीक्षण जोड़ने के लिए, लेकिन कॉल करने के लिए होगा, "हम इकाई ग्राहक लॉगिन मॉड्यूल का परीक्षण" के रूप में आप ककड़ी या सेलेनियम नहीं हो गया।
gbjbaanb
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.