2009-11-24 9 views
20

मैंने टेस्ट-संचालित विकास (टीडीडी) के बारे में बहुत कुछ पढ़ा है और मुझे व्यक्तिगत अनुभव के आधार पर सिद्धांतों को बहुत ही आकर्षक लगता है।एएसपी.नेट एमवीसी के साथ टेस्ट-संचालित विकास - कहां से शुरू करें?

फिलहाल मैं एक स्टार्ट-अप प्रोजेक्ट के लिए एक वेबसाइट विकसित कर रहा हूं जिसमें मैं शामिल हूं, और मैं टीडीडी को अभ्यास में रखने के लिए अपना हाथ आजमाने की कोशिश करना चाहता हूं।

तो ... मैं विजुअल स्टूडियो 2010 में एक खाली समाधान बना रहा हूं, एक एएसपी.नेट एमवीसी वेबसाइट प्रोजेक्ट और एक टेस्ट प्रोजेक्ट जोड़ें।

मैं अपने डोमेन ऑब्जेक्ट्स के लिए 'डोमेन' नामक एक क्लास लाइब्रेरी भी जोड़ता हूं, और इसके लिए एक टेस्ट प्रोजेक्ट भी जोड़ता हूं।

अब मैं सोच रहा हूं कि कहां से शुरू करना है। क्या मुझे कुछ भी सही करने से पहले मुझे एक परीक्षा लिखनी चाहिए? सवाल यह है - क्या मुझे डोमेन ऑब्जेक्ट्स के लिए परीक्षण लिखना शुरू करना चाहिए? यदि हां, तो डोमेन ऑब्जेक्ट्स अभी तक मौजूद नहीं होने के बाद से मुझे वास्तव में क्या परीक्षण करना चाहिए?

या क्या मुझे वेबसाइट प्रोजेक्ट से शुरुआत करना चाहिए और इसके लिए परीक्षण लिखना चाहिए? यदि हां, तो मुझे किसके लिए एक परीक्षा लिखनी चाहिए? गृह नियंत्रक/सूचकांक कार्रवाई?

उत्तर

11

मैं आमतौर पर उस एप्लिकेशन के लिए कहानियों का एक सेट एकत्र करके शुरू करता हूं जिसे मैं विकसित करने जा रहा हूं। उस से मैं आमतौर पर "पेपर" पर एक डोमेन मॉडल उत्पन्न करता हूं। मैं उन कहानियों को व्यवस्थित करता हूं जिन्हें मैं कार्यान्वित करने जा रहा हूं और कहानियों के पहले सेट के लिए डीबी में डोमेन मॉडल बनाना शुरू कर दूंगा।

एक बार जब मेरा प्रारंभिक डीबी हो, तो मैं प्रारंभिक कक्षाओं के सेट पर डीबी टेबल मैप करने के लिए, मेरे मामले में, LINQ से SQL में, एक ORM का उपयोग करता हूं। मैं आम तौर पर यूनिट टेस्ट जेनरेट कोड नहीं करता हूं, इसलिए इससे मुझे आधार के आधार पर कोड की उचित मात्रा मिलती है। मैं फिर एक स्टब विधि बनाता हूं, जो पहले डोमेन क्लास की एक सुविधा को लागू करने के लिए लागू नहीं किया गया अपवाद फेंकता है, जिसके साथ मैं काम कर रहा हूं। आमतौर पर, मैं सत्यापन तर्क से शुरू होता हूं। एक बार जब आपकी स्टब विधि हो, तो आप उस विधि के लिए एक या अधिक यूनिट परीक्षण बनाने के लिए वीएस राइट क्लिक मेनू का उपयोग कर सकते हैं। फिर आप अपने रास्ते पर हैं।

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

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

जब तक कहानियों के सेट को लागू नहीं किया जाता है, तब तक दोहराया जाता है, जिस तरह से रीफैक्टरिंग किया जाता है।

0

तुम भी घोषित वर्ग परीक्षण किए जाने जैसे C# के रूप में एक स्थिर भाषाओं में एक छोटे से कठोर लगता पहले ASP.NET MVC 1.0 Test Driven Development

3

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

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

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

2

लंबे उत्तर के लिए आपको इस तरह के छोटे कदम उठाने चाहिए। परीक्षा उत्तीर्ण करने का सबसे सरल कोड लिखें -

1) प्रथम एक असफल परीक्षण

[Test] 
    public void AddSameTag() 
    { 
     UserMovie userMovie = new UserMovie(); 

     userMovie.AddTag("action", "dts", "dts"); 
     Assert.AreEqual(2, userMovie.Tags.Count); 
    } 

2) लिखें।

public virtual void AddTag(params string[] tags) 
    { 
     foreach (var text in tags) 
     { 
      Tag tag =new Tag(text.Trim()); 
      if (!movieTags.Contains(tag)) 
       movieTags.Add(tag); 
     } 
    } 

3) - Refactor

। एएसपी.नेट एमवीसी और टीडीडी स्टार्टर के लिए आप नियंत्रक परीक्षण को अनदेखा कर सकते हैं और टीडीडी द्वारा डोमेन पर ध्यान केंद्रित कर सकते हैं।

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