2010-05-02 12 views
6

मेरे पास कुछ रिपोजिटरी कक्षाएं हैं जो IRepository इंटरफेस से प्राप्त विभिन्न प्रकार के डेटा से बात करने के लिए हैं।आप डेटा से बात करने के लिए एक वर्ग का परीक्षण कैसे करते हैं?

कार्यान्वयन में, कोड डेटा स्रोत से बात करता है, यह एक्सएमएल फाइलों या डेटाबेस या यहां तक ​​कि सिर्फ एक कैश की निर्देशिका हो। क्या इन कार्यान्वयनों में से किसी एक को विश्वसनीय रूप से यूनिट परीक्षण करना संभव है? मुझे एक नकली कार्यान्वयन काम नहीं दिख रहा है, क्योंकि तब मैं केवल नकली कोड का परीक्षण कर रहा हूं, न कि वास्तविक कोड।

उत्तर

8

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

जहां संभव हो, यदि आप धाराओं या पाठकों के संदर्भ में अपना कार्यान्वयन व्यक्त कर सकते हैं, तो आप अपना जीवन आसान बना देंगे: कार्यान्वयन के उन हिस्सों के परीक्षण परीक्षण मेमोरी डेटा स्रोतों, या परीक्षण में संसाधनों से धाराओं के खिलाफ जा सकते हैं सभा। बेशक आपको शायद कुछ परीक्षणों की आवश्यकता होगी जो वास्तविक डेटाबेस या फ़ाइल सिस्टम पर जाते हैं, लेकिन उम्मीद है कि कम है।

चाहे आप ऐसे परीक्षण "यूनिट" परीक्षण कहें या नहीं, यह एक बात है कि आप यूनिट परीक्षणों को कैसे परिभाषित करते हैं; व्यक्तिगत रूप से मुझे शामिल नामों के बारे में बहुत अधिक परवाह नहीं है, लेकिन मैं परीक्षण करने की परवाह करता हूं। विशेष रूप से डेटाबेस के लिए, ये कुछ हद तक दर्दनाक हो सकते हैं (विशेष रूप से यदि आप समानांतर में परीक्षण चलाने में सक्षम होना चाहते हैं) - लेकिन वे मेरे अनुभव में अविश्वसनीय रूप से मूल्यवान भी हो सकते हैं।

1

मुझे लगता है कि यदि आप ऐसे कोड का परीक्षण कर रहे हैं जो वास्तव में डेटा को जारी रखता है या क्वेरी करता है, तो संभवतः आप वास्तव में डेटाबेस को हिट करना चाहते हैं।

ये यूनिट परीक्षणों के बजाय एकीकरण परीक्षण हैं।

आप एक परीक्षण डेटाबेस स्थापित कर सकते हैं, जिसमें आप डेटा की स्थिति जानते हैं, और इसके खिलाफ परीक्षण चलाते हैं। आप शायद यह भी कहना चाहते हैं कि वे आपके यूनिट परीक्षणों से अलग हैं और इन्हें प्रत्येक चेक पर चलाने की आवश्यकता नहीं है (nnnit में आप अपनी टेस्ट क्लास को एक विशेषता के साथ सजा सकते हैं जो इसे चलाने के लिए नहीं कहता है)

1

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

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

1

आईरिपोजिटरी के कार्यान्वयन में किसी बिंदु पर आप एक तृतीय पक्ष एपीआई का उपयोग करेंगे जो वास्तव में डेटाबेस/फ़ाइल/एक्सएमएल से/पढ़ेगा/लिखेंगे। आप यह सुनिश्चित करने के लिए उन एपीआई को नकल करना चाहते हैं कि आपका कोड सही क्रम में सही API को कॉल करता है।

तो यदि आप डेटाबेस से पढ़ रहे हैं तो आप एसक्यूएलकनेक्शन और एसक्लोकॉमैंड का नकल कर सकते हैं और सुनिश्चित कर सकते हैं कि आप उन वर्गों पर सही तरीके से कॉल करें। यदि आप किसी स्ट्रीम में लिख रहे हैं, तो आप स्ट्रीम का मज़ाक उड़ा सकते हैं और सुनिश्चित कर सकते हैं कि आप इसे फ्लश करें और इसका निपटान करें (उदाहरण के लिए)।

संबंधित मुद्दे