2010-08-28 17 views
15

स्पष्ट रूप से, I don't understand unit testing। यह ठीक है, क्योंकि मैंने इसे पहले कभी नहीं किया है। मैं एक नई परियोजना शुरू कर रहा हूं, और शुरुआत से यूनिट परीक्षण को सेंकना चाहता था, इसलिए मैं सीखना चाहता हूं।यूनिट परीक्षणों से क्या कवर किया जाना चाहिए, और नहीं होना चाहिए?

मैंने हमेशा कोड कवरेज के साथ यूनिट परीक्षण समीकरण किया था, यह सोचकर कि आपके पास यूनिट परीक्षण होना चाहिए जो आपके आवेदन में प्रत्येक कार्य/विधि को कवर करता है, लेकिन स्पष्ट रूप से यह मामला नहीं है और मैंने अवधारणा को पूरी तरह गलत समझा है।

तो,

  • कार्यों का क्या प्रकार इकाई परीक्षण से लाभ?
  • यूनिट का परीक्षण किस प्रकार के कार्यों का परीक्षण नहीं किया जाना चाहिए?

उत्तर

1

TDD के अनुसार (टेस्ट प्रेरित विकास) कार्यप्रणाली एक हर सार्वजनिक समारोह, और कहा कि समारोह में निष्पादन के हर पथ का परीक्षण करना चाहिए।

+0

लेकिन नियंत्रकों और रूटर (अर्थात सामने नियंत्रक) जैसी चीजों सार्वजनिक हैं, और मैं नहीं दिख रहा है कि कैसे इकाई परीक्षण उन्हें कवर कर सकते हैं। इस सवाल के लिए मैंने जो प्रश्न पूछा है, और राइस डी'एट्रे में यह समस्या है। क्या इसे "हर सार्वजनिक कार्य जो मूल्य लौटाता है" जैसे कुछ में संशोधित किया जाना चाहिए, या क्या इन उदाहरणों को इकाई परीक्षण को कवर करने का कोई तरीका है? – AgentConundrum

+0

नियंत्रक और राउटर भी परीक्षण किया जाना चाहिए। यह एक सिद्धांत नहीं है, यह दैनिक आधार पर अभ्यास में किया जाता है। कुछ ढांचे, यानी रेल, दूसरों की तुलना में इसे आसान बनाते हैं। नियंत्रकों के लिए उदाहरण परीक्षण: http://guides.rubyonrails.org/testing.html#functional-tests-for-your-controllers मार्गों के लिए उदाहरण परीक्षण: http://guides.rubyonrails.org/testing.html#testing- मार्ग – qertoip

0

यूनिट परीक्षण एक उपकरण है, और इसका उपयोग करने के तरीके पर कई दृष्टिकोण हैं। यहां मेरा दृष्टिकोण है:

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

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

+0

मुझे खेद है, मैं आपकी शर्तों में थोड़ा सा खो रहा हूं ("डीएओ हस्ताक्षर", "डीटीओ")। क्या आप इसे थोड़ा सा स्पष्ट कर सकते हैं? – AgentConundrum

+0

* डीएओ = http://en.wikipedia.org/wiki/Data_access_object (दृढ़ता अबास्ट्रक्शन के लिए सेवाएं) * डीटीओ = http://en.wikipedia.org/wiki/Data_transfer_object (मूल्य ऑब्जेक्ट्स) –

2

मैं एक पूरा जवाब नहीं है (मैं किसी को कौन करता है, ईमानदारी से यह जानकर प्रसन्नता होगी), लेकिन कम से कम कुछ अंक बाहर टॉस कर सकते हैं ...

  1. आप पहले से ही कर रहे हैं पहले स्थान पर परीक्षण से विकास चलाकर सही ट्रैक करें। मौजूदा अनुप्रयोगों में रेट्रो-फिटिंग यूनिट परीक्षण कठिन है और शायद ही कभी वास्तविक लाभ प्रदान करता है (इसके बजाय अक्सर कोड कवरेज की झूठी भावना देता है)। उचित टीडीडी हमेशा एक पूर्व विचार है, कभी विचार नहीं किया।
  2. मैं निजी कार्यों का परीक्षण परेशान नहीं करता। विभिन्न कोड कवरेज टूल कह सकते हैं कि यह अनचाहे छोड़ दिया गया है, लेकिन यदि यह निजी है तो इसकी कार्यक्षमता का परीक्षण सार्वजनिक तरीकों का परीक्षण करके किया जाना चाहिए। निजी विधियां आंतरिक हैं और एपीआई का हिस्सा नहीं हैं, कक्षा के बाहर कुछ भी नहीं (यहां तक ​​कि परीक्षण) उन्हें पता होना चाहिए या उनकी परवाह करना चाहिए, क्योंकि उस वर्ग के कार्यान्वयन को बदलकर आसानी से बदल सकते हैं।
  3. अपने कोड के उजागर एपीआई पर ध्यान केंद्रित करें। अपने वर्गों के खिलाफ नहीं, अपने इंटरफेस के खिलाफ परीक्षण लिखें। कक्षाओं को बाद में परीक्षणों के खिलाफ लागू और परीक्षण किया जाता है।
  4. अंत में, और बहुत महत्वपूर्ण बात यह है कि आप जो कर रहे हैं उसका अध्ययन करें और इसके क्या फायदे हैं। लेखन इकाई परीक्षण भूरा-और-सेवा प्रक्रिया नहीं है। कोई भी परीक्षण लिखकर अच्छा परीक्षण कवरेज प्राप्त नहीं करता है, लेकिन टीडीडी को समझकर और इसे कैसे कार्यान्वित किया जाता है। यह अभ्यास करेगा। एक सुझाव जो मैं दूंगा वह एक उचित टीडीडी परियोजना करना है और मौजूदा परियोजना में परीक्षणों को रेट्रो-फिट करने का भी प्रयास करना है। हम पूरे दिन एक-दूसरे को बता सकते हैं कि पूर्व उत्तरार्द्ध से बेहतर है, लेकिन दोनों करके आप वास्तव में मतभेदों को समझ सकते हैं और की बेहतर समझ प्राप्त कर सकते हैं क्यों यह बेहतर है। यह आपको केवल टेस्ट लिखने और टीडीडी के विशेषज्ञ होने और इसे वास्तव में तालिका में लाए जाने से परे लाएगा। कोई भी परीक्षण लिख सकता है, लेकिन अक्सर वे अपने समय बर्बाद कर रहे हैं जब तक वे वास्तव में समझ नहीं लेते कि क्या हो रहा है।
+0

@ डेविड: आप फिर से ! मैं बता सकता हूं कि मैं आपसे बहुत कुछ सीखने जा रहा हूं .. दो चीजें: 1) मैं पहले से ही इसके बारे में बहुत कुछ पढ़कर # 1/# 4 समझता हूं, और समान अवधारणाओं के साथ अस्पष्ट अनुभव - यही कारण है कि क्यूए विभागों की आवश्यकता है - एक डेवलपर कोड के बारे में बहुत कुछ जानता है और कोड पास करने के लिए परीक्षण को फिर से भर देगा। 2) एमवीसी प्रश्न पर वापस जाने के लिए आपने मेरे लिए भी उत्तर दिया, आप नियंत्रकों और राउटर/फ्रंट कंट्रोलर जैसी चीज़ों के साथ "यूनिट परीक्षण सार्वजनिक विधियों" का मेल कैसे करते हैं? इन वस्तुओं में सार्वजनिक इंटरफेस हैं, लेकिन मुझे नहीं लगता कि आप उन पर यूनिट परीक्षण कैसे फिट कर सकते हैं। – AgentConundrum

+0

@AgentConundrum: मुझे फिर से? :) वेबफॉर्म में कोड-बैक पर एमवीसी में नियंत्रकों के बड़े लाभों में से एक यह है कि वे आसानी से यूनिट परीक्षण कर सकते हैं। यहाँ एक नज़र डालें: http://www.lostechies.com/blogs/chrismissal/archive/2010/02/05/unit-testing-simple-asp-net-mvc-controllers.aspx और http://msdn.microsoft .com/en-us/पत्रिका/dd942838.aspx और http://www.asp.net/mvc/tutorials/creating-unit-tests-for-asp-net-mvc-applications-vb के "संदर्भ" एप्लिकेशन को मजाक किया जा सकता है ताकि आपको केवल यह जांचने की आवश्यकता हो कि क्रियाएं सही विचारों को वापस लाती हैं। निर्भरताओं पर मोक्स सत्यापित करते हैं कि उन्हें ठीक से बुलाया गया था। – David

+0

(माफ करना अगर मैं नेट यहां संभालने कर रहा हूँ, यह सिर्फ मेरे अनुभव हो गया है अवधारणाओं सार्वभौमिक हालांकि लागू किया जा सकता, इस्तेमाल किया उपकरणों की परवाह किए बिना।।) – David

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