मैं, ऊपर की ज्यादा से सहमत इकाई परीक्षण से संबंधित। हालांकि, मुझे लगता है कि इस मुद्दे को उठाना महत्वपूर्ण है कि मॉक रिपोजिटरीज और यूनिट परीक्षणों का उपयोग करके आपको डीबी इंटीग्रेशन टेस्ट के रूप में परीक्षण के समान स्तर नहीं मिलते हैं।
उदाहरण के लिए, हमारे डेटाबेस में अक्सर स्कीमा में निर्मित कैस्केडिंग डिलीट होते हैं। इस मामले में, कुल मिलाकर प्राथमिक इकाई को हटाने से सभी बच्चे इकाइयों को स्वचालित रूप से हटा दिया जाएगा। हालांकि, यह स्वचालित रूप से एक मॉक किए गए भंडार में लागू नहीं होगा जिसे इन व्यावसायिक नियमों के साथ भौतिक डेटाबेस द्वारा समर्थित नहीं किया गया था (जब तक कि आपने उन सभी नियमों को मॉक में नहीं बनाया)। यह महत्वपूर्ण है क्योंकि अगर कोई मेरे स्कीमा के डिजाइन के साथ आता है और बदलता है, तो मुझे अपने परीक्षणों को तोड़ने की ज़रूरत है ताकि मैं तदनुसार कोड/स्कीमा समायोजित कर सकूं। मैं सराहना करता हूं कि यह एकीकरण परीक्षण है और यूनिट परीक्षण नहीं है, लेकिन सोचा कि यह उल्लेखनीय है।
मेरा पसंदीदा विकल्प एक मास्टर डिज़ाइन डेटाबेस बनाना है जिसमें नमूना डेटा (उसी प्रकार का डेटा जो आप अपने मोक्स में बनाएंगे) शामिल है। प्रत्येक टेस्ट रन की शुरुआत के दौरान, मेरे पास एक स्वचालित स्क्रिप्ट है जो मास्टर डीबी का बैकअप बनाता है और इसे "टेस्टडीबी" (जो मेरे सभी परीक्षणों का उपयोग करती है) को पुनर्स्थापित करती है। इस तरह, मैं प्रत्येक टेस्ट रन पर खुद को पुनर्निर्मित करने के बजाय मास्टर में स्वच्छ परीक्षण डेटा का भंडार बनाए रखता हूं। मेरे परीक्षण डेटा के साथ खेल सकते हैं और आवश्यक सभी परिदृश्यों का परीक्षण कर सकते हैं।
जब मैं एप्लिकेशन को डीबग करता हूं, तो मेरे पास एक और स्क्रिप्ट है जो एक डीई डेटाबेस में मास्टर डीबी का बैक अप लेती है और पुनर्स्थापित करती है। मैं अपने नमूना डेटा खोने के बारे में चिंता किए बिना यहां डेटा के साथ भी खेल सकता हूं। डीबी के पुनर्निर्मित होने की प्रतीक्षा में देरी की वजह से मैं आम तौर पर इस सत्र को हर सत्र में नहीं चलाता। मैं इसे दिन में एक बार चला सकता हूं और फिर पूरे दिन ऐप को चारों ओर डीबग कर सकता हूं। उदाहरण के लिए, मैं अपने डीबगिंग के हिस्से के रूप में तालिका से सभी रिकॉर्ड्स हटा देता हूं, जब मैं कर रहा हूं तो मैं डीवीडीबी को फिर से बनाने के लिए स्क्रिप्ट चलाऊंगा।
ये कदम ध्वनि की तरह लगता है कि वे प्रक्रिया में बहुत अधिक समय जोड़ देंगे, लेकिन असल में - वे नहीं करते हैं। वर्तमान में हमारे आवेदन में 3500 परीक्षण क्षेत्र हैं, जिनमें से 3000 उनमें से कुछ बिंदु पर डीबी तक पहुंचते हैं। डेटाबेस बैकअप और पुनर्स्थापन आमतौर पर प्रत्येक परीक्षण चलाने की शुरुआत में लगभग 10-12 सेकंड लेता है। और चूंकि पूरे टेस्ट सूट को केवल टीएफएस चेकइन पर निष्पादित किया जाता है, इसलिए हमें कोई फर्क नहीं पड़ता कि हमें थोड़ी देर इंतजार करना है या नहीं। औसतन दिन, हमारे पूरे टेस्ट सूट को चलाने में लगभग 15-20 मिनट लगते हैं।
मैं सराहना करता हूं और स्वीकार करता हूं कि एकीकरण परीक्षण यूनिट परीक्षण (वास्तविक डीबी का उपयोग करने की अंतर्निहित आवश्यकता के कारण) से बहुत धीमा है, लेकिन यह 'असली दुनिया' ऐप का अधिक निकटता से प्रतिनिधित्व करता है। उदाहरण के लिए, मॉक रिपोजिटरीज डीबी त्रुटि कोड वापस नहीं करते हैं, टाइम-आउट नहीं करते हैं, वे लॉक नहीं होते हैं, वे डिस्क स्पेस से बाहर नहीं होते हैं, आदि
यूनिट परीक्षण सरल के लिए ठीक हैं गणना, बुनियादी व्यापार नियम, आदि और निश्चित रूप से वे अधिकांश परिचालनों के लिए सबसे अच्छी पसंद हैं जिनमें डीबी (या अन्य संसाधन) पहुंच शामिल नहीं है। लेकिन मुझे नहीं लगता कि वे एकीकरण परीक्षण के रूप में मूल्यवान हैं - लोग यूनिट परीक्षणों के बारे में बहुत कुछ बोलते हैं, लेकिन एकीकरण परीक्षणों के बारे में बहुत कुछ कहा जाता है।
मुझे उम्मीद है कि यूनिट परीक्षणों के बारे में उन भावुक लोगों को इसके लिए आग लग जाएगी। यह ठीक है - मैं बस कुछ संतुलन लाने और लोगों को याद दिलाने की कोशिश कर रहा हूं कि पारित इकाइयों के परीक्षण से भरे परियोजनाएं अभी भी उस क्षेत्र में लागू होने के बाद बुरी तरह विफल हो सकती हैं।
मैं उसी डेटाकॉन्टेक्स्ट मॉकिंग कोड का उपयोग करता हूं और यह अच्छी तरह से –