आपके कोडबेस में कहीं न कहीं, कोड की एक पंक्ति है जो दूरस्थ DB से जुड़ने की वास्तविक क्रिया करती है। कोड की यह लाइन 10 में 9 बार, आपकी भाषा और पर्यावरण के लिए रनटाइम पुस्तकालयों द्वारा प्रदान की गई "अंतर्निहित" पद्धति के लिए एक कॉल है। जैसे, यह "आपका" कोड नहीं है और इसलिए आपको इसे परीक्षण करने की आवश्यकता नहीं है; एक यूनिट परीक्षण के प्रयोजनों के लिए, आप भरोसा कर सकते हैं कि यह विधि कॉल सही ढंग से प्रदर्शन करेगी। आप अपने यूनिट टेस्ट सूट में क्या कर सकते हैं और अभी भी परीक्षण करना चाहिए, इस कॉल के लिए उपयोग किए जाने वाले मापदंडों को सुनिश्चित करने जैसी चीजें हैं जो आप उनसे होने की उम्मीद करते हैं, जैसे कि यह सुनिश्चित करना कि कनेक्शन स्ट्रिंग सही है, या SQL कथन या संग्रहीत कार्यविधि नाम।
यह प्रतिबंध के पीछे का एक उद्देश्य है कि यूनिट परीक्षणों को उनके रनटाइम "सैंडबॉक्स" को नहीं छोड़ना चाहिए और बाहरी स्थिति पर निर्भर होना चाहिए। यह वास्तव में काफी व्यावहारिक है; एक इकाई परीक्षण का उद्देश्य यह सत्यापित करना है कि आपके द्वारा लिखा गया कोड (या TDD में लिखने वाला है) आपके द्वारा सोचे गए तरीके का व्यवहार करता है। कोड जो आपने नहीं लिखा, जैसे कि आप अपने डेटाबेस संचालन को करने के लिए जिस लाइब्रेरी का उपयोग कर रहे हैं, वह किसी भी इकाई परीक्षण के दायरे का हिस्सा नहीं होना चाहिए, बहुत ही सरल कारण के लिए कि आपने इसे नहीं लिखा।
आपके एकीकरण परीक्षण सूट में, ये प्रतिबंध आराम से हैं। अब आप कर सकते हैंडिजाइन परीक्षण जो डेटाबेस को छूते हैं, यह सुनिश्चित करने के लिए कि आपने जो कोड लिखा था वह उस कोड के साथ अच्छी तरह से खेलता है जो आपने नहीं किया था। हालांकि, इन दो टेस्ट सूट को अलग रखा जाना चाहिए, क्योंकि आपकी यूनिट टेस्ट सूट अधिक प्रभावी है जो इसे तेजी से चलाता है (इसलिए आप जल्दी से यह सत्यापित कर सकते हैं कि डेवलपर्स द्वारा उनके कोड के बारे में किए गए सभी दावे अभी भी पकड़ में हैं), और लगभग परिभाषा से, एक एकीकरण परीक्षण बाहरी संसाधनों पर निर्भरता के कारण परिमाण के क्रम से धीमा है। बिल्ड-बॉट को हर कुछ घंटों में अपने पूर्ण एकीकरण सूट को चलाने दें, बाहरी संसाधनों को लॉक करने वाले परीक्षणों को निष्पादित करें, ताकि डेवलपर्स स्थानीय स्तर पर इन समान परीक्षणों को चलाकर एक-दूसरे के पैर की उंगलियों पर कदम न रखें। और अगर निर्माण टूटता है, तो क्या? बिल्ड-बीओटी को सुनिश्चित करने पर बहुत अधिक महत्व दिया जाता है एक बिल्ड शायद कभी नहीं होना चाहिए।
अब, आप इसका कड़ाई से पालन कैसे कर सकते हैं यह डेटाबेस से जुड़ने और क्वेरी करने के लिए आपकी सटीक रणनीति पर निर्भर है। कई मामलों में जहां आपको "नंगे-हड्डियों" डेटा एक्सेस फ्रेमवर्क का उपयोग करना चाहिए, जैसे कि ADO.NET की SqlConnection और SqlStatement ऑब्जेक्ट, आपके द्वारा विकसित एक पूरी विधि में अंतर्निहित विधि कॉल और अन्य कोड शामिल हो सकते हैं जो एक होने पर निर्भर हैं डेटाबेस कनेक्शन, और इस स्थिति में आप जो सबसे अच्छा कर सकते हैं, वह पूरे फ़ंक्शन का मज़ाक उड़ाता है और आपके एकीकरण परीक्षण सूट पर भरोसा करता है। यह इस बात पर भी निर्भर करता है कि आप अपनी कक्षाओं को परीक्षण के उद्देश्यों के लिए कोड की विशिष्ट लाइनों को बदलने की अनुमति देने के लिए कितने तैयार हैं (जैसे कि टेम्बी विधि के पैटर्न का सुझाव, जो एक अच्छा है क्योंकि यह "आंशिक नकली" की अनुमति देता है
यदि आपका डेटा दृढ़ता मॉडल आपकी डेटा परत में कोड पर निर्भर करता है (जैसे ट्रिगर्स, संग्रहीत procs, आदि) तो बस कोड का उपयोग करने का कोई और तरीका नहीं है जो आप स्वयं लिख रहे हैं परीक्षण विकसित करने के लिए जो या तो डेटा परत के अंदर रहते हैं या पार करते हैं। आपके एप्लिकेशन रनटाइम और DBMS के बीच की सीमा। एक शुद्धतावादी इस पैटर्न को कहेंगे, इस कारण से, ओआरएम जैसी किसी चीज़ के पक्ष में टाला जाना चाहिए। मुझे नहीं लगता कि मैं काफी दूर जाऊंगा; यहां तक कि भाषा-एकीकृत प्रश्नों और अन्य संकलक-जांच किए गए, डोमेन-निर्भर दृढ़ता वाले संचालन के युग में, मुझे डेटाबेस को केवल संग्रहीत कार्यविधि के माध्यम से उजागर होने वाले संचालन को बंद करने में मूल्य दिखाई देता है, और निश्चित रूप से ऐसी संग्रहीत प्रक्रियाओं को स्वचालित रूप से सत्यापित किया जाना चाहिए। परीक्षण। लेकिन, ऐसे परीक्षण इकाई परीक्षण नहीं हैं । वे एकीकरण हैं परीक्षण।
यदि आपको इस अंतर के साथ कोई समस्या है, तो यह आमतौर पर "कोड कवरेज" उर्फ "यूनिट टेस्ट कवरेज" पर रखा गया एक उच्च महत्व पर आधारित है। आप यह सुनिश्चित करना चाहते हैं कि आपके कोड की प्रत्येक पंक्ति एक इकाई परीक्षण द्वारा कवर की गई हो। इसके चेहरे पर एक महान लक्ष्य है, लेकिन मैं कहता हूं कि हॉगवॉश; यह मानसिकता खुद को इस विशिष्ट मामले से बहुत दूर खींचती हुई प्रतिमानों को उधार देती है, जैसे कि मुखर परीक्षण लिखना जो निष्पादित करते हैं लेकिन व्यायाम नहीं करते हैंतुम्हारा कोड। केवल कवरेज नंबरों के लिए इस प्रकार के एंड-रन आपके न्यूनतम कवरेज को आराम देने से अधिक हानिकारक हैं। यदि आप यह सुनिश्चित करना चाहते हैं कि आपके कोडबेस की प्रत्येक पंक्ति किसी स्वचालित परीक्षण द्वारा निष्पादित की जाती है, तो यह आसान है; कोड कवरेज मेट्रिक्स की गणना करते समय, एकीकरण परीक्षण शामिल करें। आप एक कदम आगे भी जा सकते हैं और इन विवादित "इटिनो" परीक्षणों ("केवल नाम में एकीकरण") को अलग कर सकते हैं, और आपकी इकाई परीक्षण सूट और एकीकरण परीक्षणों के इस उप-श्रेणी के बीच (जो अभी भी बहुत तेजी से चलना चाहिए) आपको प्राप्त करना चाहिए पूर्ण कवरेज के करीब।