2009-08-22 17 views
27

मैं एक साल के अनुभव के साथ एक सी # Winforms डेवलपर हूँ। एकमात्र यूनिट परीक्षण जो मैं अब तक कर रहा हूं मैनुअल रहा है। मैं कुछ समय के लिए निम्नलिखित के बारे में सोच है:स्वचालित इकाई परीक्षण - क्यों? क्या? कौन कौन से?

  • क्यों हम इकाई स्वचालित है करने के लिए परीक्षण की आवश्यकता है? यह कितना प्रभावी है?
  • यदि मैं स्वचालित यूनिट परीक्षण करना शुरू करना चाहता हूं। मुझे कहां से शुरू करना चाहिए? (नूनिट के बारे में सुना है)
  • क्या मुझे पर कुछ भी रखने की ज़रूरत है जब मेरी कक्षाओं को पर स्वचालित इकाई परीक्षण की सुविधा मिलती है?
  • क्या सी # में स्वचालित इकाई परीक्षण के लिए एक अंतर्निहित समर्थन है?
  • क्या हम स्वचालित इकाई परीक्षण के साथ जीयूआई का परीक्षण भी कर सकते हैं या क्या यह सिर्फ तर्क है?
  • ढांचे के बारे में सुना है। क्या वे इकाई परीक्षण के लिए भी हैं?

उत्तर

60

हमें स्वचालित इकाई परीक्षण क्यों करने की आवश्यकता है? यह कितना प्रभावी है?

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

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

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

यदि मैं स्वचालित इकाई परीक्षण करना शुरू करना चाहता हूं। मुझे कहां से शुरू करना चाहिए? (नूनिट के बारे में सुना है)

सबसे पहले, आपको कुछ यूनिट परीक्षण मूल बातें सीखनी होंगी। रॉय ओशरोव की पुस्तक The Art of Unit Testing एक अच्छी परिचय है।

जब ढांचे की बात आती है, तो न्यूटिट लंबे समय से आसपास रहा है, लेकिन इसमें कुछ अंतर्निहित मुद्दे हैं।

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

यदि आप एक मुक्त, मुक्त स्रोत इकाई परीक्षण ढांचे की तलाश में हैं, तो मैं xUnit.net की सिफारिश करूंगा, जो कि एक और अधिक आधुनिक ढांचा है।

क्या स्वचालित इकाई परीक्षण की सुविधा के लिए मेरी कक्षाओं को डिजाइन करते समय मुझे कुछ भी ध्यान में रखना चाहिए?

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

क्या सी # में स्वचालित इकाई परीक्षण के लिए एक अंतर्निहित समर्थन है?

नहीं, सी # सिर्फ एक भाषा है, लेकिन जैसा कि मैंने ऊपर बताया है, विजुअल स्टूडियो के कुछ संस्करणों में एमएसटीएस्ट है।

क्या हम स्वचालित इकाई परीक्षण के साथ जीयूआई का परीक्षण भी कर सकते हैं या यह सिर्फ व्यावसायिक तर्क है?

यूनिट परीक्षण जीयूआई बहुत भंगुर हो जाता है (यानी, परीक्षण रखरखाव बहुत अधिक है), इसलिए आमतौर पर एक अच्छा विचार नहीं है। Modev-व्यू-नियंत्रक, मॉडल-व्यू-प्रस्तुतकर्ता, अनुप्रयोग नियंत्रक, मॉडल-व्यू-ViewModel, आदि

:

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

ढांचे के बारे में सुना है। क्या वे इकाई परीक्षण के लिए भी हैं?

गतिशील नकली पुस्तकालय यूनिट परीक्षण के लिए केवल हैं।

कुछ अच्छी और लोकप्रिय वालों

+2

व्यापक उत्तर। – Sandbox

+4

वाह ... यह 2014 है, और यह मेरी खोज में मिली सबसे अच्छी सामग्री है जो मेरे जैसे नौसिखिया की मदद कर सकती है। आप के लिए कुडोस, महोदय। – Malavos

+0

अभी भी एक मजबूत, उपयोगी उत्तर 2017 के रूप में भी (एक भर्ती न्यूब से)। मैं इसे विजुअल स्टूडियो 2015 के रूप में अपडेट करना चाहता था, मूल एमएसटीएस्ट एक्सप्रेस सहित प्रत्येक संस्करण में बनाया गया है। एमएस में एक नया यूआईटीएस्ट फ्रेमवर्क है जो केवल उच्च पैकेजों में शामिल है (मुझे लगता है कि प्रो और एंटरप्राइज़)। – LightCC

2

स्वचालित इकाई परीक्षण के लिए क्यों आसान है: क्योंकि आपका कोड बढ़ता है, मैन्युअल परीक्षण करने में लंबा और लंबा समय लगेगा, जिसका अर्थ है कि आप इसे कम करने की संभावना कम हैं।

परीक्षण स्वचालित करके, आप उन्हें चलाने के लिए सुविधाजनक बनाते हैं, इसलिए वे दौड़ेंगे।

+0

कृपया अगर आप उन्हें चलाने के लिए भूल जाते हैं, तो स्वचालित रन इसे पकड़ लेगा, और आपको बताएगा कि आप कुछ गड़बड़ कर चुके हैं। (इसने मुझे इस सप्ताह सिर्फ कुछ बार मदद की है)। – Martin

4
  • हमें स्वचालित इकाई परीक्षण क्यों करने की आवश्यकता है? यह कितना प्रभावी है?

बहुत।

  • मैं स्वचालित इकाई परीक्षण कर रही शुरू करने के लिए चाहते हैं। मुझे कहां से शुरू करना चाहिए? (Nunit बारे में सुना है) nunit के साथ शुरू करो - अपने बहुत ही आसान

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

  • क्या सी # में स्वचालित इकाई परीक्षण के लिए एक अंतर्निहित समर्थन है? नहीं - लेकिन दृश्य स्टूडियो है - लेकिन मैं इसे

  • हम भी स्वचालित इकाई परीक्षण के साथ जीयूआई का परीक्षण कर सकता उपयोग करने की अनुशंसा नहीं है या यह सिर्फ व्यापार तर्क है? कुछ भी स्वचालित किया जा सकता है, यह सिर्फ इतना सवाल है कि यह करना कितना मुश्किल है।

  • ढांचे के बारे में सुना है। क्या वे इकाई परीक्षण के लिए भी हैं? हां।

Read Roy Osherove's The art of unit testing.

+0

पुस्तक की सिफारिश के लिए धन्यवाद। – Sandbox

6

प्वाइंट 1) यह आप काम क्या की एक सतत अवलोकन और नहीं क्या देता है।जैसे ही आप एक साधारण फ़ंक्शन बदलते हैं, तो परिणामस्वरूप यदि यह परिवर्तन कुछ भी तोड़ देता है तो परिणाम होता है। इसके अलावा आप बाद में अपने पूरे आवेदन को दोबारा कर सकते हैं और जहां तक ​​आपका यूनिट परीक्षण हरा जा रहा है, सब कुछ ठीक काम करता है। बस यह बिंदु एक बहुत ही महत्वपूर्ण है। या आपने कभी ऐसा प्रोजेक्ट किया है जिस पर कभी रिफैक्टर नहीं किया गया हो?

प्वाइंट 2) एनयूनीट शुरू करने के लिए एक अच्छी जगह है, लेकिन कई अन्य यूनिट परीक्षण ढांचे हैं। इसके अलावा मैं सुझाव देता हूं कि क्रूज़ कंट्रोल या अन्य निरंतर एकीकरण उपकरण देखें जो डेवलपर से अधिक काम लेते हैं।

प्वाइंट 3) ठीक है, निश्चित रूप से ऐसे लोग हैं जो आपको घंटे और घंटे बता सकते हैं कि क्या करना है और क्या नहीं। जहां तक ​​मेरी इकाई परीक्षण पृष्ठभूमि इसे एम्बेडेड उपकरणों के लिए उपयोग करने के लिए सीमित है, हमारे पास काफी भिन्नताएं हैं।

प्वाइंट 4) सी # एक प्रोग्रामिंग भाषा है, परीक्षण परीक्षण नहीं। .NET में कम से कम एक विशेषता है जो यूनिट परीक्षणों के दौरान मदद कर सकती है, जो आपके आंतरिक वर्गों और विधियों को एक शानदार प्रकार के लिए सार्वजनिक बनाने के लिए आंतरिक दृश्यमान-विशेषता है।

प्वाइंट 5) यदि आपके पास एक अच्छी तरह से डिज़ाइन किया गया एप्लिकेशन है तो आपको अपने गुई का परीक्षण नहीं करना पड़ेगा। इसके बारे में सोचें: आपके गुई के पास कोई कोड नहीं है। प्रत्येक बटन जो उपयोगकर्ता दबा सकता है उसे नियंत्रक के लिए मैप किया जाता है। उपयोगकर्ता द्वारा प्रदान किए जाने वाले प्रत्येक इनपुट को नियंत्रक को सौंप दिया जाता है। तो आपको अपने गुई में क्या परीक्षण करना है? आपको बस इतना करना है कि आपके कंट्रोलर को परीक्षण और अच्छी तरह से काम करना है। और इस एमवीवीएम/एमवीसी/व्हाटएल्से आर्किटेक्चर के साथ आपके पास एक हाथ एक अच्छी तरह से डिज़ाइन किया गया एप्लिकेशन है और दूसरी ओर एक ऐसा एप्लिकेशन है जो परीक्षण करने में आसान है।

7
  • हमें स्वचालित इकाई परीक्षण क्यों करने की आवश्यकता है? यह कितना प्रभावी है?

किसी प्रोग्राम के हिस्सों को अलग करने और दिखाने के लिए वे "सही" हैं। यदि आप कोड को चलाने के लिए मानते हैं तो वे एक अनुबंध हैं। अगर हाथ सही तरीके से काम कर रहा है तो हाथ से यह आपको जल्दी और अक्सर बता सकता है।

यूनिट परीक्षण प्रोग्रामर को अधिक आत्मविश्वास और कम दुष्प्रभावों के साथ कोड को अधिक आसानी से बदलने में सक्षम बनाता है। यह कोड के रिफैक्टरिंग को बढ़ावा देता है/सक्षम करता है जो यूनिट परीक्षणों के बिना खतरनाक हो सकता है। इस सब को ध्यान में रखते हुए मुझे लगता है कि यूनिट परीक्षण आपके कोड को बेहतर बना देगा।

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

  • यदि मैं स्वचालित यूनिट परीक्षण करना शुरू करना चाहता हूं। मुझे कहां से शुरू करना चाहिए? (नूनिट के बारे में सुना है)

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

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

मैंने सूची में पुस्तकों का पुन: उपयोग किया है क्योंकि मुझे यूनिट परीक्षण के साथ काम हाथ को दोबारा करने की तकनीकें मिली हैं।

  • मैं स्वचालित इकाई परीक्षण की सुविधा जब करने के लिए अपने वर्गों डिज़ाइन करते समय ध्यान में कुछ भी रखने के लिए की जरूरत है?

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

  • करता है सी # स्वचालित इकाई परीक्षण के लिए एक में निर्मित समर्थन है?

यदि आपके पास वीएस 2008 प्रो, हाँ, या टीम सिस्टम है लेकिन स्वाभाविक रूप से मुझे लगता है कि आप नहीं करते हैं।

  • हम भी स्वचालित इकाई परीक्षण के साथ जीयूआई परीक्षण या यह सिर्फ व्यापार तर्क है सकते हैं?

हां, वहां कई टूल हैं। वाटिन एक है जो दिमाग में आता है।

  • ढांचे के बारे में सुना है। क्या वे इकाई परीक्षण के लिए भी हैं?

हां। वे simulating/testing very complex objects के लिए अनुमति देते हैं कि आप आसानी से यूनिट परीक्षण नहीं कर सकते हैं।

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

एक और पुस्तक जिसे मैंने बहुत उपयोग किया है, हालांकि यह मेरे दिमाग को पढ़ने के लिए दर्द करता है, विरासत संहिता के साथ प्रभावी ढंग से काम कर रहा है। यह वास्तव में आपको दिखाता है कि अनचाहे लोगों के लिए कितना निर्दोष कोड जीवन को वास्तव में कठिन बना सकता है।

+2

+1 धन्यवाद। एक और व्यापक जवाब। – Sandbox

1
Why do we need to have automated unit testing? How effective is it? 
  • आप नहीं कर रहे हैं। यह तय करने के लिए आप पर निर्भर है कि आप चाहते हैं या नहीं। यह केवल उतना ही प्रभावी होगा जितना आप इसे बनाते हैं। आपको केवल स्वचालन के लिए जाना चाहिए यदि आप 3 बार से अधिक कोड के टुकड़े के लिए परीक्षण चक्र दोहराने जा रहे हैं !!! यदि मैं स्वचालित इकाई परीक्षण करना शुरू करना चाहता हूं। मुझे कहां से शुरू करना चाहिए? (नूनिट के बारे में सुना है)

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

  • आप कर सकते हैं लेकिन आपको नहीं करना चाहिए। जीयूआई मैन्युअल रूप से बेहतर परीक्षण किया जाता है। मशीनों की तुलना में आंखों में इंटरफ़ेस में आंखें अधिक त्रुटियां पाती हैं। ढांचे के बारे में सुना है। क्या वे इकाई परीक्षण के लिए भी हैं?

  • हां टेस्टएनजी, जुनीट इत्यादि जैसे अधिकांश ढांचे यूनिट परीक्षण के लिए हैं।

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