2015-07-15 8 views
5

मैंने टीडीडी के बारे में पढ़ा है और मैंने इसे अपनी नई परियोजना पर आजमाया है।टेस्ट संचालित विकास कैसे सही तरीके से करें?

TDD cycle

मैं समझता हूँ कि TDD में यह ब्लैकबॉक्स परीक्षण की तरह है, यानी यह मायने रखता है क्या बजाय कैसे तो, मैंने निष्कर्ष निकाला और के रूप में कई पदों पर इसके बारे में पढ़ने के बाद निजी तरीकों का परीक्षण बंद कर दिया यह सही तरीका नहीं है।

हालांकि, मैं इन कारणों से ऐसा करने में विफल रहा।

मैं आपको उदाहरण के अनुसार दिखाऊंगा: मेरे पास एक प्रोग्राम है जो एक पाठ अनुच्छेद पढ़ता है इसलिए मैंने अपनी टेस्ट विधि (tdd step1 के लिए) में ऐसा कुछ लिखा।

/* 
My program reads a textual paragraph from file and saves it to my custom paragraph object; 
*/ 

तो तदनुसार मैं लाल मामला बनाने के लिए इस विधि का बना दिया।

public void paragraphMustNotBeNullTest(){ 
File f = new File("some path") 
ParagraphReader reader= new ParagraphReader(); 
reader.read(); 
assertNotNull("my custom paragraph is null",reader.getCustomParagraph()); 
} 

मैं कोड निम्नलिखित लिखा है:

package com.olabs.reader; 

import java.io.FileInputStream; 
import java.io.InputStream; 

import com.olabs.models.OlabsParagraph; 

public class Para { 


    private String paragraphText = null; 
    private Paragraph oParagraph = null; 

    public Paragraph getCustomParagraph() { 
     return oParagraph; 
    } 
    public void setoParagraph(Paragraph oParagraph) { 
     this.oParagraph = oParagraph; 
    } 

    public void read() { 
     InputStream is = new FileInputStream("abc......"); 
//  .. 
     String text = is.read(); // assume I got text read from file. 
     this.paragraphText = text; 
    } 


    private void createCustomParagraph() 
    { 
     Paragraph p = new Paragraph(); 
     p.setText(paragraphText); 
     p.setId(1); 
     p.setType("Story"); 
     ........... 
    } 

    private void countWords() 
    { 
     // counting words in paragraph logic 
    } 


} 

अब समस्या मैं पहले से पता है कि मैं countingwords और निजी तरीके के रूप में createCustomParagraph का उपयोग किया जाएगा है।

  1. उन्हें सार्वजनिक रूप बनाने और TDD चक्र का पालन करें:

    तो, कि मामलों में मैं के साथ जाना चाहिए।

  2. उन्हें निजी बनाएं।

  3. उनके लिए परीक्षण हटाएं (क्योंकि विधियां अब निजी और परीक्षण के लिए पहुंच योग्य नहीं हैं)। मुझे लगता है कि यह tdd करने के लिए काफी बोझिल और गलत तरीका है।

मैं this.Everyone के बारे में उलझन में हूँ लिखने कोड आप एक असफल परीक्षण लिखने के बाद ही कहते हैं, लेकिन यहाँ अगर मैं जानता हूँ कि मैं एक निजी विधि तो कैसे मैं यह कर देगा लिखने के लिए जा रहा हूँ?

यदि मैं कहीं गलत हूं तो मैं आपको सही करने का अनुरोध करता हूं। इसके अलावा यदि संभव हो तो कुछ वास्तविक उदाहरण दे ...

इसके अलावा, मुझे डर है कि समय के सबसे अधिक मैं संपादन परीक्षण या उन्हें को हटाने पहुँच विनिर्देशक समस्याओं या पुनर्रचना की वजह से ...

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

+2

कुछ निजी तरीकों से आपकी निजी विधियां (प्रत्यक्ष या अप्रत्यक्ष रूप से) हैं। आप सार्वजनिक तरीकों का परीक्षण करते हैं। Ergo, आप निजी तरीकों का परीक्षण (परोक्ष रूप से)। क्या आपको बिल्कुल भ्रमित करता है? – Turing85

+0

तो क्या आपका मतलब reader.read() है; विधि कॉल पर्याप्त है? यानी मैं निजी तरीकों को लिखने पर जाऊंगा, मैं इन नए निजी तरीकों के लिए लाल हरे रंग के पीले चक्र से नहीं जाऊंगा (मुझे लगता है कि यह तत्काल होना चाहिए कि यह निजी होना चाहिए) मैं बना हूं? – swapyonubuntu

+1

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

उत्तर

4

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

+0

इसका मतलब यह है कि जब मैं रीडर.read() जैसी सार्वजनिक विधि लिखता हूं, तो मैं पाठक वर्ग के अंदर अन्य विधियों को लिखने पर जा सकता हूं (मुझे लगता है कि वे निजी होंगे क्योंकि मुझे सार्वजनिक विधि पढ़ने के लिए पढ़ा गया है) बिना किसी चक्र के उन्हें (यानी प्रत्येक विधि के लिए लाल ग्रीम पीला) इस मामले में मेरी एकमात्र सार्वजनिक विधि के रूप में (मेरी धारणा और स्पष्ट कॉलिंग विधि के अनुसार पढ़ा जाएगा()) – swapyonubuntu

+0

आपकी कक्षा का उद्देश्य सार्वजनिक तरीकों की क्षमताओं को प्रदान करना है । कक्षा के अंदर जो कुछ भी हो रहा है वह सार्वजनिक तरीकों का समर्थन कर रहा है। यदि आप ब्लैक बॉक्स दृष्टिकोण का उपयोग कर रहे हैं, तो आंतरिक कार्यान्वयन तब तक कुछ भी हो सकता है जब तक सार्वजनिक कार्यक्षमता परीक्षण पास कर रही हो। –

+0

क्या मुझे निष्कर्ष निकालना चाहिए कि सार्वजनिक इंटरफ़ेस को निजी तरीकों से बनाया, पुन: सक्रिय और विघटित किया जाएगा ... और केवल उस सार्वजनिक विधि को परीक्षणों में बुलाया जाएगा। मुझे यकीन नहीं है कि मैं सही तरीके से सही कर रहा हूं। – swapyonubuntu

1

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

+0

आपको नहीं लगता कि आप परीक्षण के लिए डिज़ाइन को संशोधित कर रहे हैं। क्या आप एक उदाहरण पोस्ट कर सकते हैं? – swapyonubuntu

+1

@swapyonubuntu: ठीक है, यही कारण है कि वे इसे टीडीडी कहते हैं। शायद बाद में। –

0

बहुत अच्छा सवाल है। मैंने इसे कई बार भी पूछा। और आम तौर पर उत्तरों ने कहा कि आपको यूनिट परीक्षणों के बारे में सोचना है जो मुख्य कार्यक्षमता के कार्यान्वयन से पहले फ्रेम के कार्यान्वयन से पहले चला जाता है। ये फ्रेम सख्ती से कार्यक्षमता को परिभाषित करते हैं।

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

एक लक्ष्य संख्या कोड कोड की न्यूनतम पंक्तियां लिखना है, जो यूनिट परीक्षणों द्वारा को कवर किया जाना चाहिए। मैंने अपने ब्लॉग पर TDD topic अधिक गहराई से कवर किया।

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