टीडीडी के साथ नई परियोजना शुरू करना


10

मैं TDD का अध्ययन कर रहा हूं और मैंने पढ़ा कि यह आपको ऐप के डिज़ाइन को परिभाषित करने में भी मदद करता है, सही?

इसलिए मैंने इसे बेहतर तरीके से समझने में मदद करने के लिए एक नया प्रोजेक्ट बनाना शुरू करने का फैसला किया।

मैं एक सरल उपयोगकर्ता पंजीकरण प्रणाली बनाना चाहता हूं जो इसका नाम, ईमेल पता, देश (सूची में से एक उठाएगा) और फोन नंबर मांगेगा।

तो सवाल यह है ...

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

चूंकि यह मुझे डिजाइन को परिभाषित करने में मदद करेगा, इसलिए मैं यहां कौन से परीक्षण लिख सकता हूं?

किसी भी मदद के लिए धन्यवाद!

c#  .net  tdd 

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

जवाबों:


6

जब आप इकाई परीक्षण लिखते हैं, तो आप अपने आवेदन के व्यवहार का परीक्षण कर रहे हैं ताकि यह पूछना महत्वपूर्ण हो कि आपका आवेदन क्या है ? यहाँ एक शुरुआत है:

[TestFixture]
public class RegistrationTests
{
    [Test]
    public void Should_save_new_user_info()
    {
    }

    [Test]
    public void Should_throw_validation_exception_when_email_already_exists()
    {
    }

    [Test]
    public void Should_format_phone_number_when_country_code_is_us()
    {
    }
}

खैर, वे सभी परीक्षण पहले से ही पास हैं, आगे क्या? :)
स्कॉट व्हिटलोक

2

बस एक परीक्षण परियोजना बनाना और कुछ परीक्षण विधियां लिखना एक तरह का TDD है, लेकिन मेरे अनुभव में यह तब तक बहुत मददगार नहीं है जब तक कि आप एक पुस्तकालय पर काम नहीं कर रहे हैं जहाँ एक ज्ञात एपीआई है और विधि कॉल सीधे उपयोगकर्ता द्वारा अपेक्षित किसी चीज़ से मेल खाती है। । आपको परीक्षणों की सही सूची के साथ आने की आवश्यकता है, और एक गैर-तुच्छ अनुप्रयोग के लिए, जो वास्तव में करना मुश्किल हो सकता है।

मैं SpecFlow की कोशिश करने की सलाह देता हूं - यह परीक्षणों को कार्यान्वयन से अलग करता है और फीचर फ़ाइलों की संरचना आपको यह सोचने के लिए मजबूर करती है कि आप वास्तव में क्या परीक्षण कर रहे हैं।

जब आप किसी विशेषता को परिभाषित करते हैं तो आप कुछ ऐसा लिखते हैं

When a user is saved
Then the user should exist

क्योंकि आप इस बिंदु पर कोड फ़ाइल में नहीं हैं, इसलिए आपको कार्यान्वयन विवरण के बारे में सोचने का मोह नहीं है, जैसे उपयोगकर्ता को बनाने के लिए किस विधि को बुलाया जाता है या यहां तक ​​कि इसे किस वर्ग में लागू किया जाता है। आप अलग-अलग कार्यान्वयन चुनने के लिए टैग का उपयोग कर सकते हैं। इसलिए इस स्तर पर यह मायने नहीं रखता कि "उपयोगकर्ता सहेजा गया है" का अर्थ है क्रिएटयूजर को कॉल करना या ब्राउज़र खोलना और फॉर्म सबमिट करना।

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

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

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

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

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


2

मुझे कुछ पाठ पढ़ने के साथ-साथ कोड काटने के साथ TDD में अपने पहले प्रयोगों का समर्थन करना अच्छा लगा। इस विषय पर विकिपीडिया लेख बहुत अच्छा है और आपको अन्य संसाधनों की एक विस्तृत विविधता का नेतृत्व करेगा। विशेष रूप से केंट बेक की चीजों की तलाश करें - टीडीडी के पिता की तरह।

एक और चीज़ जो आपको इसके स्विंग में लाने में मदद कर सकती है वह है कुछ कटास - सरल, लगभग बिना प्रशिक्षण प्रशिक्षण। रॉय ओशेरोव के पास कुछ अच्छे हैं।

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

और आपको शुरू करने के लिए, शायद अपने नाम की आवश्यकता के साथ शुरू करें। आपको क्या चाहिए?

आपको शायद एक वर्ग की आवश्यकता होगी। उसके लिए एक परीक्षण लिखें (कुछ लोग इसे छोड़ देते हैं लेकिन जब शुरुआत व्यायाम के लिए करते हैं) और कक्षा लिखते हैं।

आगे आपकी कक्षा को नाम रखने की आवश्यकता होगी। एक परीक्षण लिखें जो यह साबित करे कि आपकी कक्षा वास्तव में कर सकती है। फिर टेस्ट पास करने के लिए फिर से कोड लिखें।

फिर शायद आपके पास कुछ और व्यावसायिक नियम हैं। हो सकता है कि आप चाहते हैं कि आपका नाम कम से कम अक्षर लंबा हो। परीक्षण लिखें, इसे विफल देखें, कोड लिखें।

और इसी तरह...


1

मुझे लगता है कि थोड़े से उत्तर में आपको TDD का विचार देना संभव नहीं है। आपको किसी ऐसे व्यक्ति को "देखने" की आवश्यकता है जो इसे महसूस कर रहा हो। उस विषय के बारे में मैंने जो सबसे अच्छा संसाधन पाया है वह है http://pragprog.com/tmarks/achbd/the-rspec-book । इससे पहले कि आप मुझे बताएं, कि रूबी आपकी भाषा नहीं है: अंकल बॉब द्वारा पढ़ें! ;-)


1
Rspec पुस्तक ठीक है। अगर ओपीडी पर एक किताब पढ़ने जा रहा है, तो यह होना चाहिए: amazon.com/Test-Driven-Development-Kent-Beck/dp/0321146530
Julio

0

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


0

जैसा कि आपने सिस्टम का वर्णन किया है, आवेदन स्तर पर केवल एक ही परीक्षण है:

[परीक्षण] सार्वजनिक शून्य Save_and_retrieve_user (स्ट्रिंग नाम, ईमेल ईमेल, ...) {// सहेजें // पुनर्प्राप्त करें / सत्यापित करें}

जैसा कि आप आवश्यकताओं को परिष्कृत करते हैं, अधिक परीक्षण जोड़ें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.