2010-07-31 12 views
12

मान लें कि मैं टीडीडी के साथ एक गेम शुरू कर रहा हूं। क्या यह एक अच्छा पहला परीक्षण है?पहला टीडीडी परीक्षण बिना किसी जोर/अपेक्षित अपवाद के। यह इसके लायक है?

[TestMethod] 
public void Can_Start_And_End_Game() 
{ 
    Tetris tetris = new Tetris(); 
    tetris.Start(); 
    tetris.End(); 
} 

यह मूल रूप से मुझे मजबूर करता 3 चीजें परिभाषित करने के लिए: Tetris वर्ग और उसके Start() और End() तरीकों, लेकिन यह काफी बेकार है के अलावा है। इसमें उनके ब्याज के तुरंत बाद हो सकता है कि मैं उस वर्ग और उन तरीकों को परिभाषित कर सकता हूं, लेकिन बाद में यह शायद किसी भी प्रकार के उद्देश्य की सेवा नहीं करेगा। इसका एकमात्र उद्देश्य शायद यह दिखाएगा कि खेल शुरू करना और बीच में अपवाद प्राप्त किए बिना इसे समाप्त करना संभव होना चाहिए।

उस पर आपके विचार क्या हैं?

+0

, विधियों बड़े अक्षरों में नहीं कर रहे हैं। इसलिए 'tetris.start()' और 'tetris.end()' –

+3

निश्चित रूप से। लेकिन सी # में वे हैं। –

+0

तकनीकी रूप से यह एकीकरण परीक्षण है क्योंकि आप एक से अधिक चीज़ों का परीक्षण कर रहे हैं। आपके पास स्टार्ट, एंड के लिए परीक्षण, और यह एकीकरण परीक्षण के लिए परीक्षण होना चाहिए। –

उत्तर

19

यह मूल रूप से मुझे मजबूर करता 3 चीजें परिभाषित करने के लिए: टेट्रिस वर्ग और उसके प्रारंभ() और समाप्ति() विधियों,

यह सच है।

लेकिन इसके अलावा यह बहुत बेकार है।

झूठा।

बाद में यह शायद यह भी उद्देश्य के किसी भी प्रकार

झूठी सेवाएं नहीं दे पाएंगे।

इसके ... उद्देश्य [है] पता चलता है कि यह एक खेल शुरू करते हैं और मध्यम

में एक अपवाद के बिना इसे समाप्त करने के लिए संभव होना चाहिए और वह बड़ी है। महाकाव्य। स्मारकीय।

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

यह परीक्षण ईपीआईसी है।

+0

वाह, मैंने इसके बारे में सोचा नहीं था। –

+0

ईपीआईसी !!!!!!!!!!! – strager

+2

"यह परीक्षण ईपीआईसी है" +1 :) – Skilldrick

1

मुझे लगता है कि परीक्षण के उद्देश्य के किसी भी अपवाद को पकड़ने और स्पष्ट रूप से परीक्षण में विफल अगर यह happpens से साफ किया जा सकता है:

[TestMethod] 
public void Can_Start_And_End_Game() 
{ 
    try 
    { 
     Tetris tetris = new Tetris(); 
     tetris.Start(); 
     tetris.End(); 
    } 
    catch (Exception ex) 
    { 
     Assert.Fail("Unexpected exception thrown: " + ex.ToString()); 
    } 
} 
+2

एक 'Assert.DoesNotThrow' विधि है जो यह करता है। – strager

+0

क्या यह अनावश्यक नहीं है कि "चलो x = x" या "if (true == true)"? मैंने सोचा कि यह xunit सम्मेलन था कि विधि के नाम पर ध्यान दिए बिना, "DoNotThrow" विचार हमेशा किसी भी प्रकार के दावे के साथ या बिना किसी अंतर्निहित और समझा जाता है। – apollodude217

3

मैं इस परीक्षण का एक बड़ा प्रशंसक नहीं हूँ। हां यह इंटरफ़ेस को परिभाषित करने में मदद करता है, लेकिन यह परिभाषित करने (और परीक्षण) व्यवहार के लिए बहुत मजबूत नहीं है।

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

आदर्श रूप से प्रत्येक परीक्षण विधि एक व्यवहार निष्पादित करती है।

+3

+1। एक अच्छे परीक्षण में एक भी दावा है; इस में कोई नहीं है। – TrueWill

1

हां, परीक्षण पुष्टि करता है कि कन्स्ट्रक्टर, Start() और Stop() विधि में कोई अपवाद नहीं डाला गया है।

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

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

कृपया यूनिट परीक्षण लिखने और टीडीडी का उपयोग करने के बीच के अंतर से अवगत रहें। मूल्य उस अंतर को समझने से आता है।

7

आप वास्तव में इस परीक्षण के साथ टेट्रिस कक्षा के विकास को नहीं चला रहे हैं - आपने तय किया है कि इसकी एपीआई क्या होनी चाहिए, जो ठीक है, लेकिन ऐसा परीक्षण क्यों नहीं लिखना चाहिए जो वास्तव में कुछ करना चाहिए?

परीक्षणों को एपीआई को सूचित करना चाहिए, इसके विपरीत (imho) के विपरीत नहीं होना चाहिए।

+0

मुझे लगता है कि आपने इसे खींचा है। लेकिन एस लॉट के जवाब पर भी नजर डालें। –

+0

@devoured - धन्यवाद। मैं वास्तव में एस लॉट पसंद करता हूं :) – Skilldrick

1

एस। लॉट ने कहा, इस परीक्षण में जमीन का एक टन शामिल है। यह बहुत "इसके लायक" है कि यह कम से कम 3 टेस्ट मैचों में टूट रहा है और प्रत्येक के लिए उपयुक्त दावे जोड़ने के लायक है:

[TestMethod] 
public void Test_Contructor() 
{ 
    Tetris tetris = new Tetris(); 
    // make assertions 
} 

[TestMethod] 
public void Test_Start() 
{ 
    // setup 
    Tetris tetris = new Tetris(); 

    // exercise 
    tetris.Start(); 

    // make assertions 
} 

[TestMethod] 
public void Test_End() 
{ 
    // setup 
    Tetris tetris = new Tetris(); 
    tetris.Start(); 

    // exercise 
    tetris.End(); 

    // make assertions 
} 
जावा में
संबंधित मुद्दे