इकाई परीक्षण मामलों को लिखते समय हम नकली वस्तुएं क्यों लिखते हैं?


11

हम वर्तमान में अपने प्रोजेक्ट में यूनिट टेस्ट केस लिख रहे हैं। डेटाबेस विधियों के लिए कार्यान्वयन मौजूद है और ठीक काम कर रहा है। इस मामले में हमें नकली वस्तुओं को लिखने की आवश्यकता क्यों है? क्या कोई खास वजह है? मैं सीधे DAO इम्प्लांटेशन का परीक्षण क्यों नहीं कर सकता?

जवाबों:


6

आपको डेटाबेस में कॉल का मजाक नहीं करना चाहिए क्योंकि यह उद्देश्य को हरा देगा। उदाहरण के लिए, आप क्या कह रहे हैं, उदाहरण के लिए, सेवा स्तर से अपने DAO को कॉल करें। मॉकिंग आपको अलगाव में तरीकों का परीक्षण करने की अनुमति देता है।

कहो कि आपके पास इस तरह की वास्तुकला के साथ एक रेस्तरां सिमुलेशन है:

Cook <=> Server <=> Customer

आप प्रत्येक परत का स्वतंत्र रूप से परीक्षण करना चाहते हैं। यहां Serverआपकी सेवा की परत है और इसे CookDAO माना जा सकता है। वह Serverहै जो आप परीक्षण करते समय मॉक करना चाहते हैं Customer, और वही Cookहै जो आप परीक्षण करते समय मॉक करना चाहते हैं ServerCookइकाई परीक्षण, हालांकि, सत्यापित करना चाहिए कि कार्यान्वयन एक हैमबर्गर लौटा रहा है जब एक हैमबर्गर आदेश दिया गया था और नहीं एक रबर टायर।


3
मैं इस कथन से असहमत हूं कि आपको डेटाबेस में कॉल का मजाक नहीं उड़ाना चाहिए क्योंकि इससे उद्देश्य की हार होगी। क्योंकि यह बहुत सामान्य लगता है। जैसा कि अन्य नीचे कहते हैं, आपको अलगाव में सब कुछ परीक्षण करने की आवश्यकता है। यदि आप जिस इकाई परीक्षण की बात कर रहे हैं वह डेटाबेस एक्सेस है, तो निश्चित रूप से, आपकी टिप्पणी सही है। यदि आप जिस इकाई की इकाई परीक्षण कर रहे हैं वह डेटाबेस एक्सेस नहीं है, तो आपका पहला वाक्य गलत है। मैं आपकी हर बात से सहमत हूं। +0। :-)
पीटर के।

6

डेटाबेस के साथ मिलकर व्यवसायिक परीक्षण करना पूरी तरह से ठीक है। लेकिन इन परीक्षणों को एकीकरण परीक्षण कहा जाता है, भले ही आप इन्हें निष्पादित करने के लिए ननिट या जूनिट या फ़पुनिट का उपयोग करें।

यूटिलिटीज स्पेजियलाइज्ड टेस्ट हैं जहां अलगाव में परीक्षण (यानी डेटाबेस के बिना buisinesslogic) महत्वपूर्ण है। इस अलगाव को लागू करने के लिए मोक्स / फेक / स्टेप्स का उपयोग किया जाता है।


2

बस: वास्तविक DAO और डेटाबेस सामग्री का परीक्षण करने के लिए।

मान लीजिए कि आपके DAO व्यक्ति वर्ग के पास एक विधि getByName () है। आप एक परीक्षण लिखते हैं और Person.getByName ("जॉन स्मिथ") को कॉल करते हैं। मान लीजिए कि परीक्षण विफल हो गया, क्योंकि किसी ने डेटाबेस से जॉन का रिकॉर्ड हटा दिया। अब, प्रत्येक CI सॉफ़्टवेयर और आपके पर्यवेक्षक / समीक्षक दावा कर सकते हैं कि आपका सॉफ़्टवेयर दोषपूर्ण है, जबकि वास्तव में यह नहीं है। यदि आप DB का मजाक उड़ाते हैं, तो आप साबित कर सकते हैं कि आपका DAO काम करता है यदि इसे सही तालिका से सही पंक्ति दी जाती है।

यदि आप वास्तव में स्वयं डेटाबेस का परीक्षण करना चाहते हैं, अर्थात: यदि किसी निश्चित डीएओ पद्धति का निष्पादन एक निश्चित अवस्था में डेटा डालता है, तो यह भी संभव है। क्या अधिक है यह निराला डेटा मॉडल (ईएवी, नेस्टेड ट्री सेट) के साथ वास्तव में सहायक है जहां आप डेटाबेस से बुलेट-प्रूफ अखंडता प्रदान करने की उम्मीद नहीं कर सकते। अपने जीवन को आसान बनाने के लिए DBUnit पर एक नज़र डालें ।


1

एक और कारण वास्तव में डेटाबेस कमांड चलाने के निष्पादन समय से बचने के लिए है। यह बहुत ज्यादा नहीं लग सकता है, लेकिन कनेक्शन स्थापित करने और फाड़ने के ओवरहेड अंततः जोड़ देगा और सबसे अधिक संभावना है कि मॉक ऑब्जेक्ट्स की तुलना में टेस्ट सूट को चलाने के लिए समग्र समय बढ़ाएं।


0

आपके द्वारा परीक्षण किए जा रहे वर्ग को अलग करने के लिए। या फिर यदि परीक्षण विफल हो जाता है तो आपको कैसे पता चलेगा कि समस्या उस कक्षा में है जिसका आप परीक्षण कर रहे हैं या इसकी कोई एक निर्भरता है।


क्या आप सीधे डीएओ निहितार्थ में कॉल और परीक्षण के तरीके करते हैं?
विनोथ कुमार CM
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.