सरल परीक्षण करने के लिए, डेटाबेस एक्सेस लेयर का मजाक उड़ाना पूरी तरह से स्वीकार्य है। आप कॉल करते हैं getName()
, यह कहता है कि डीएओ दैट्स का मजाक उड़ाया गया है और पहले नाम के लिए "जॉन" और अंतिम नाम के लिए "स्मिथ", उन्हें इकट्ठा करता है और सब कुछ एकदम सही है। वास्तव में यूनिट को वहां डेटाबेस का परीक्षण करने की आवश्यकता नहीं है।
चीजें तब थोड़ी ज्यादा हो जाती हैं जब तर्क थोड़ा और जटिल हो जाता है। क्या होगा यदि आपके पास एक विधि "createOrUpdateUser (...)" है। यदि आपने डेटाबेस का मजाक उड़ाया है, तो आप यह सत्यापित कर सकते हैं कि दिए गए तरीके को एक निश्चित पैरामीटर के साथ एक बार कॉल किया गया है जब नकली वस्तु वापस नहीं आती है और एक मौजूदा विधि वापस आने पर डेटाबेस पर एक अलग विधि लागू होती है। यह उस फजी लाइन पर पहुंचना शुरू हो जाता है जहां यह आसान हो सकता है (विशेषकर यदि यह पहले से ही था) मेमोरी डेटाबेस में एक विशेष को स्पिन करने के लिए और प्रीकॉन्फ़िगर्ड डेटा के साथ उस कोड का परीक्षण करें।
कुछ वास्तविक कोड में मैंने (बिक्री के बिंदु) पर काम किया, हमारे पास एक resumeSuspededTransaction(...)
विधि थी। यह डेटाबेस से ऑब्जेक्ट (और उसके घटकों) में लेनदेन को खींच लेगा और डेटाबेस को अपडेट कर देगा। हमने इसे मॉक किया था और डेटाबेस में जाने वाले डेटा के क्रमांकन और डीरियलाइजेशन के साथ कोड में कहीं बग खराब हो गया था (हमने एक प्रकार को बदल दिया था जो डेटाबेस पर अलग-अलग रूप से क्रमबद्ध था)।
मॉक ने हमें बग नहीं दिखाया क्योंकि यह अपने खुशहाल रास्ते को लौटा रहा था - लेन-देन को क्रमबद्ध करें, इसे मॉक में स्टोर करें, मॉक से इसे हटा दें, परीक्षण करें कि वे समान हैं। हालाँकि, जब आप किसी ऑब्जेक्ट को डेटाबेस में अग्रणी शून्य के साथ क्रमबद्ध करते हैं, तो यह उन्हें ड्रॉप कर रहा था और फिर शून्य के बिना इसे वापस स्ट्रिंग में पुनर्संयोजित करता है। हमने बग को समस्या निवारण के माध्यम से डेटाबेस के बिना पकड़ा (यह जानते हुए कि यह वहां था एक बार स्पॉट करना मुश्किल नहीं था)।
बाद में, हमने एक डेटाबेस वहां रखा और महसूस किया कि बग कभी भी उस जूनियर टेस्ट से नहीं गुजरेगा यदि हम इसके बजाय मेमोरी डेटाबेस में जा रहे थे।
मेमोरी डेटाबेस में फायदे हैं:
- वे परीक्षण के लिए जल्दी से (खातों, तालिकाओं और ऐसे सेट करने के लिए एक डीबीए की आवश्यकता के बिना) काता जा सकता है
- डेटा को उस परीक्षण के लिए पूर्व-निर्धारित किया जा सकता है
- जब परीक्षण वापस किया जाता है तो परीक्षण के बारे में चिंता करने की आवश्यकता नहीं है
- प्रत्येक परीक्षण की अपनी मेमोरी डेटाबेस में होती है इसलिए आपको चिंता करने की ज़रूरत नहीं है कि दो परीक्षण एक साथ चल रहे हैं
- वे उन सिस्टम पर चलाए जा सकते हैं जिनमें वास्तविक डेटाबेस से कनेक्टिविटी नहीं है