2010-07-15 17 views
12

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

मेरी निराशा, हालांकि, मैं अपने परीक्षण परीक्षणों में कुछ भी गलत करने के बजाय अपने परीक्षणों में गलतियों को ठीक करने में बहुत अधिक समय बिताता हूं।

मेरे ठेठ कार्यप्रवाह कुछ इस तरह किया जा रहा समाप्त होता है:

  1. एक ठूंठ
  2. परीक्षण
  3. लिखें सुनिश्चित करें कि परीक्षण में विफल रहता है
  4. ठूंठ
  5. परीक्षण में भरें अभी भी विफल रहता है, इसलिए अपेक्षित और वास्तविक आउटपुट पर जाने के दौरान थोड़ी देर बिताएं।
  6. त्रुटि वास्तविक कोड में नहीं, परीक्षण में बाहर निकलती है। परीक्षण को ठीक करें।

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

बेशक, ऐसे समय होते हैं जब मेरा उत्पादन कोड परीक्षण विफल होने का वास्तविक कारण होता है, लेकिन यह वास्तव में अपेक्षाकृत दुर्लभ है।

यूनिट परीक्षणों को पूरी तरह से खत्म करने का कोई कारण नहीं है; ऐसे समय होते हैं जब मैं बस अपने स्वयं के कोड पर भरोसा नहीं करता हूं। दूसरी ओर, मुझे लगता है कि यह सब मूल्यवान नहीं है - विशेष रूप से परीक्षण-प्रथम दर्शन।

कोई और इस तरह महसूस करता है?

उत्तर

8

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

  • आप पहले से ही नहीं है, तो एक के लिए अपने इकाई परीक्षण टूट कोशिश प्रति परीक्षण दावा। आपको कोड की प्रति इकाई में कई दावे करना पड़ सकता है कि यदि विधियां बड़े पैमाने पर हैं तो आपका परीक्षण (इसका मतलब यह हो सकता है कि आपकी विधियां भी टूटी जानी चाहिए)। लेकिन यह आपके यूनिट परीक्षणों को ढीला कर देगा और उन्हें समय लेने वाले रखरखाव के लिए कम प्रवण बनाएगा। थेरेस एक अच्छा पैटर्न बुलाया Arrange, Act Assert (AAA)
  • सुनिश्चित करें कि आपके इकाई परीक्षण को पूरी तरह से अलग कर रहे हैं, यानी, कोई बातचीत या कॉल अपने कोड के बाहर यानी, डेटाबेस, वेब सेवाओं आदि उपलब्ध बनाने के लिए व्यवस्थाएं
  • उपयोग कर रहे हैं बनाने के व्यवहार में डाल करने के लिए अपने यूनिट परीक्षण अनुभव आपके लिए अधिकतर काम करने के लिए आसान है, उदाहरण के लिए, Nbuilder ऑब्जेक्ट्स की सूचियां और Moq को परीक्षण करने के लिए आवश्यक वस्तुओं को मॉक करने के लिए।
  • यदि आप पहले से नहीं हैं, तो test fixtures का उपयोग करें ताकि आपको प्रत्येक परीक्षण के लिए सबकुछ सेट न करना पड़े।

टीडीडी और यूनिट परीक्षण निश्चित रूप से कुछ ऐसा है जो बट में वास्तविक दर्द से शुरू होता है, लेकिन यह उन चीजों में से एक है जो आप जितना अधिक रखते हैं उतना आसान और तेज हो जाते हैं।

Richard Dingwall's blog में यूनिट परीक्षण और टीडीडी के लिए सर्वोत्तम प्रथाओं पर बहुत से लेख हैं, जो वास्तव में एमवीसी के साथ इकाई परीक्षण के संबंध में हैं।

+1

धन्यवाद। मैं अभी Moq और Moles पर एक नज़र डाल रहा हूँ। मैं पहले से ही अन्य नियमों का पालन करता हूं, लेकिन मुझे जो मिल रहा है वह यह है कि मेरी गलतियां आमतौर पर टाइपों और गलतफहमी जैसी चीजें होती हैं। मुझे गणित से नफरत है, लेकिन मैं अंकगणित से भी नफरत करता हूं :( –

1

पहली बात, टीडीडी को अनुकूलित करने में समय लगता है।

हम एक साल पहले टीडीडी के साथ एक टीम के रूप में शुरू हुई थी। प्रारंभ में, हमने कोड (कक्षा/एक एकल मॉड्यूल) लिखने और फिर उस कोड को कवर करने वाले परीक्षण लिखने के साथ शुरुआत की।

फिर हम कोड के साथ समानांतर में परीक्षण लिखने के लिए प्रगति की गई (विधियों का एक तरीका/समूह लिखें और फिर उन विधियों को कवर करने वाले परीक्षण मामलों को लिखें)। इस अवधि के दौरान, हमने कवरेज टूल का उपयोग हमारे कवरेज की जांच के लिए किया था।

अब एक वर्ष के लिए ऐसा करने के बाद, टीम टेस्ट-प्रथम दृष्टिकोण से अच्छी तरह से जानी जाती है। @ सोज़ाज़ार्ड ने एएए/मॉकिंग फ्रेमवर्क का उपयोग करने के बारे में वैध बिंदुओं का उल्लेख किया है।

0

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

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