2010-02-19 7 views
5

इस सेमेस्टर के दौरान मेरे प्रोफेसर ने हमें यह समझाने की कोशिश की कि विकास के दौरान यूनिट परीक्षणों का उपयोग करना अच्छा क्यों है, डेटा (माइक्रोसॉफ्ट एप्लिकेशन ब्लॉक) को सत्यापित करना अच्छा क्यों है और उसने हमें अपने तरीकों का परीक्षण करने के लिए मॉकिंग (राइनोमोक्स) का उपयोग करने के बारे में बताया जब हमारे पास डेटाबेस तक पहुंच नहीं थी।परीक्षण के दौरान मॉकिंग का उपयोग करना यह प्रयास के लायक है?

मुझे मॉकिंग के साथ कुछ यूनिट परीक्षण करना पड़ता था और उन्हें काम करने के लिए मुझे अपनी विधि का परीक्षण करने के लिए ऑब्जेक्ट पदानुक्रम को हाथ से बनाना था (मुझे आवश्यक सब कुछ लिखने में कुछ समय लगा) ।

प्रश्न जो मैं रखना चाहता हूं: उत्पादन में मॉकिंग का उपयोग करना उपयोगी है? क्या मुझे हर बार मौका मिलने पर इसका इस्तेमाल करना चाहिए? और मॉक्स के साथ एक विधि का परीक्षण करने के लिए सबकुछ लिखने के प्रयास भी भुगतान करते हैं?

धन्यवाद

+0

"नकली ऑब्जेक्ट्स क्यों बनाएं?" का डुप्लिकेट (Http://stackoverflow.com/questions/1414032/why-create-mock-objects)। सोरिन, आपको उस प्रश्न को देखना चाहिए - इसमें कई शानदार जवाब हैं। ऐसा कहकर, ढांचे के ढांचे ने मुझे आसानी से दर्जनों (शायद सैकड़ों) घंटे बचाए हैं। –

+0

धन्यवाद जेफ, उस प्रश्न के उत्तर वास्तव में उपयोगी पढ़ें! इस सेमेस्टर पाठ्यक्रम के दौरान –

उत्तर

1

हां, के रूप में नकली वस्तुओं का उपयोग में से एक है आपके कई यूनिट परीक्षण उपकरण निश्चित रूप से एक सार्थक प्रयास है।

हालांकि, यह परीक्षण-संचालित विकास के साथ सबसे अच्छा है क्योंकि परीक्षण डिज़ाइन को चलाते हैं। जब आप को कसकर युग्मित कोड के दर्द महसूस करते हैं क्योंकि आपको गहराई से घोंसला वाले संरचनाओं को बनाए रखना है, तो आप जानते हैं कि यह एक अधिक कमजोर युग्मित एपीआई को दोबारा करने का समय है।

+0

टीडीडी भी चर्चा का विषय था। मुझे यह तय करना मुश्किल है कि निर्दिष्ट चरणों पर कूदना न पड़े। तो संक्षेप में मुझे बढ़ने के क्रम में परीक्षण (टीडीडी, मॉकिंग) की बात आती है जब पानी में मछली की तरह महसूस करने की आवश्यकता होती है। –

+0

"आपके कई यूनिट परीक्षण टूल में से एक"। बस ब्याज से बाहर, RhinoMocks और msTest/nUnit के अलावा आप अपने परीक्षणों में सहायता के लिए अन्य टूल्स का उपयोग कर रहे हैं ?? – Kye

+0

मेरा यूटी स्टैक xUnit.net, Moq और AutoFixture है। इसमें विशिष्ट परिस्थितियों के लिए जो भी कस्टम 'टूल्स' बनाया गया है - यहां एक उदाहरण है: http://blog.ploeh.dk/2009/08/06/AFluentInterfaceForTestingINotifyPropertyChanged.aspx –

0

यह एक करने का कोई अधिकार anwser नहीं है। मॉकिंग फ्रेमवर्क (जैसे राइनोमोक्स) कुछ शक्तिशाली चीजें कर सकते हैं। मेरी निजी पसंद यह है कि मैं अपनी खुद की नकली वस्तुओं को रोल करना पसंद करता हूं। अगर मुझे यह मुश्किल लगता है तो मैं इसे एक गंध के रूप में उपयोग करता हूं कि मेरे डिजाइन में कुछ गड़बड़ है।

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

मैं स्वीकार करता हूं कि मैकिंग फ्रेमवर्क का उपयोग करने पर मैं और भी सीख सकता हूं।

0

मेरी वर्तमान परियोजना के लिए, मैं अभी भी अपने यूनिट परीक्षणों के लिए ज्यादातर समय स्टब ऑब्जेक्ट्स लिखता हूं। केवल एक बार मुझे वास्तव में एक नकली वस्तु की आवश्यकता महसूस हुई और मैंने इसे मैन्युअल रूप से लिखा।

मैं इसे बहुत व्यावहारिक रूप से लेने की सलाह देना चाहता हूं: यदि आपको नकली वस्तुओं की बहुत आवश्यकता है, तो एक मॉकिंग फ्रेमवर्क सीखने पर विचार करें (यह भी पाठ्यक्रम की कीमत के साथ आता है), अन्यथा स्टब ऑब्जेक्ट्स या अपने सामयिक हाथ- लिखित नकली वस्तु।

1

Mocks निम्नलिखित समस्याओं का समाधान:

  • उनके बिना अपने परीक्षण अंत परीक्षण के तहत अपने कोड की तुलना में अधिक परीक्षण। तो अगर वहाँ निर्भरता कि अपने परीक्षण का झंडा लगा हुआ हो जाएगी में एक बग है (या भी बदतर है, यह अपने कोड में एक बग को कवर कर सकते)
  • एकीकरण अंक समय में वापस आ सकते हैं अलग परिणाम आप (लगता है - डेटाबेस राज्य में परिवर्तन) समय परीक्षण की वजह से एक बाहरी निर्भरता परिवर्तन लिए चलाए जा रहे हैं की तुलना में परीक्षण लिखने
  • जब बाहरी सिस्टम के साथ एकीकृत करने के लिए अपने परीक्षण एक बहुत धीमी चलेंगे।यह अन्य डेवलपर्स कम अक्सर उन्हें चलाने के लिए कारण और इसलिए अपने परीक्षण
  • का महत्व घटाना जब सही ढंग से इस्तेमाल किया वे परीक्षण सरल बनाने और अपने मॉड्यूल और अधिक स्पष्ट करने के इरादे को पढ़ने के लिए होगा।
0

मुझे यकीन नहीं है कि राइनोमोक्स की एक ही क्षमता है लेकिन moq के साथ आप वास्तव में इसे बनाने के बिना किसी ऑब्जेक्ट पदानुक्रम से आपको जो चाहिए उसे प्राप्त कर सकते हैं।

आईई। यदि आपकी विधि एक IUser स्वीकार करती है और IUser.Person.ContactInfo.PhoneNumbers.BusinessPhone तक पहुंच प्राप्त करने की आवश्यकता है तो आपको संपूर्ण ग्राफ बनाने की आवश्यकता नहीं है। आपको केवल यह करने की आवश्यकता है:

var mockUser = new mock(); mockUser.Setup (u => u.Person.ContactInfo.PhoneNumbers.BusinessPhone) .Returns ("555-1212");

यह मूल्यवान हो सकता है लेकिन ऊपर वर्णित मार्क के रूप में खराब डिजाइन भी हो सकता है।

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

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