यूनिट टेस्टिंग मेथड्स जो सप्लायर्स को वेबसर्विस कहते हैं


10

मेरे पास एक सार्वजनिक विधि Send()और कुछ निजी तरीकों के साथ एक वर्ग है । यह वेबसेवर्स के एक जोड़े को कॉल करता है और रिपीशन को प्रोसेस करता है। प्रसंस्करण निजी विधियों में किया जाता है।

मैं कोड का परीक्षण करना चाहता हूं। मेरी समझ यह है कि यूनिट परीक्षणों को आइसोलेशन में मेरे कोड का परीक्षण करना चाहिए (अर्थात आपूर्तिकर्ता प्रतिक्रियाओं का मज़ाक करना)।

मेरा यह भी मानना ​​है कि निजी तरीकों को इकाई परीक्षण करने की आवश्यकता नहीं होनी चाहिए लेकिन अगर मैं सिर्फ भेजने () विधि का परीक्षण करता हूं तो मेरे कोड को अलगाव में परीक्षण नहीं किया जाता है और यह आपूर्तिकर्ता के रेजोन पर निर्भर है।

क्या मुझे अपनी निजी विधियों को सार्वजनिक करना चाहिए ताकि मैं उन्हें नकली प्रतिक्रियाओं के साथ परीक्षण कर सकूं? यह बुरा अभ्यास लगता है क्योंकि मुझे केवल कक्षा को उन्हें बुलाना चाहिए।

माफी यदि इसका मूल प्रश्न है, इकाई परीक्षण के लिए काफी नया है।

Im c # और VS2010 का उपयोग कर


यदि आप एक निजी पद्धति का परीक्षण नहीं करते हैं, तो आपको कैसे पता चलेगा कि यह काम करता है?
ब्रायन ओकले

1
@BryanOakley आपको यह जानने की आवश्यकता नहीं है कि एक निजी विधि काम करती है, यह निजी है। आप जानते हैं कि यह काम करता है क्योंकि सार्वजनिक तरीके जो इसे कहते हैं वे अपने परीक्षण पास करते हैं।
स्टुपरयूजर

@ ब्रायन ओकले लिंक पर एक नज़र है
टॉम स्क्वायर्स

हाय टॉम, मैंने इसे और अधिक प्रमुख बनाने के लिए लिंक को अपडेट किया है और लिंक पाठ को अपने लक्ष्य को प्रतिबिंबित किया है। कृपया बेझिझक रोलबैक करें।
स्टुपरयूजर

जवाबों:


18

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

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


3

मुझे लगता है कि इस तरह की निर्भरता ( आपूर्तिकर्ता webservices को कॉल करना ) के साथ एक परीक्षण एक इकाई परीक्षण के बजाय एक एकीकरण परीक्षण है।


3

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

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

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

विभिन्न C # मॉकिंग चौखटों पर एक अच्छी पोस्ट के लिए निम्न SO थ्रेड देखें:

/programming/37359/what-c-mocking-framework-to-use

EDIT: अति संवेदनशील के लिए, मैं खुद करूंगा कि मैंने DbUnit या अन्य लेनदेन संबंधी उपकरणों का उल्लेख करने के लिए उपेक्षा की है जो परीक्षण के अंत में डेटाबेस में परिवर्तन कर सकते हैं। ये भी दोहराए जा सकते हैं और उत्पन्न किए गए परीक्षण डेटा के साथ पर्यावरण अज्ञेय हो सकते हैं इस प्रकार इस मामले में मॉकिंग फ्रेमवर्क की आवश्यकता नहीं है।


कोई नीचा समझा सकता है? एस: मैं PHP, ROR, NoSQL डेटाबेस पर चीर नहीं किया था, जावास्क्रिप्ट सर्वर, एप्पल उत्पादों या किसी अन्य फैब प्रवृत्ति पर अभी तक मैं अभी भी एक ड्राइव से downvote वैसे भी मिल गया
maple_shaft

मैं (मुझे नहीं था) लगता है जब कोई आपको अपनी इकाई परीक्षण "बिल्कुल नहीं इकाई परीक्षण" बुलाया जा रहा है होने की तरह नहीं था :)
डैनियल बी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.