एक के लिए, मैं लगभग कभी भी वहां नहीं बैठता और इकाई परीक्षण लिखता हूं। इकाई परीक्षण अपने आप में एक अंत नहीं बल्कि अंत का साधन है। वे जवाब देने का एक तरीका है "क्या यह कोड मूल कार्य करता है जिसे यह माना जाता है।"
उदाहरण के लिए, कुछ लोग एक फ़ंक्शन लिखेंगे, और फिर कुछ मूल्यों पर इसका परीक्षण करने के लिए एक इंटरैक्टिव सत्र खोलें और सुनिश्चित करें कि यह काम कर रहा है:
def fact x
if x == 0
1
else
x * fact(x-1)
end
end
>> fact 10
=> 3628800
>> fact 7
=> 5040
लेकिन अब आप एक बग की खोज करते हैं:
>> fact -1
SystemStackError: stack level too deep
from (irb):2:in `fact'
from (irb):5:in `fact'
from (irb):10
तो आप इसे ठीक करें:
def fact x
if x < 0
raise "Can't take the factorial of a negative number"
elsif x == 0
1
else
x * fact(x-1)
end
end
>> fact -1
RuntimeError: Can't take the factorial of a negative number
from (irb):3:in `fact'
from (irb):10
लेकिन अब आपको वास्तव में यह सुनिश्चित करने के लिए परीक्षण करना चाहिए कि यह अभी भी काम करता है:
>> fact 10
=> 3628800
>> fact 7
=> 5040
जैसा कि आप देख सकते हैं, आप समान परीक्षणों को दोहराते रहते हैं ... और आपको परिणामों की तुलना नेत्रहीन रूप से करनी होगी। यूनिट परीक्षण इस मामले में पुनरावृत्ति से बचने का एक तरीका है; यह कम करता है कि आपको कितना काम करना है। और जबकि यह एक मूर्खतापूर्ण थोड़ा उदाहरण है, वास्तविक दुनिया में, यह अधिक से अधिक महत्वपूर्ण हो जाता है, और अधिक से अधिक मैन्युअल रूप से परीक्षण करना मुश्किल होता है। बेशक, इसका मतलब यह है कि लोग केवल व्यक्तिगत घटकों का परीक्षण नहीं करते हैं; वे सिर्फ पूरे कार्यक्रम का परीक्षण करते हैं। लेकिन तब कीड़े फसल लगाते हैं, और वे खोजने में बहुत कठिन होते हैं। या बग्स होते हैं, और वे ठीक हो जाते हैं, लेकिन कोई भी एक ही बग को फिर से पेश करता है, क्योंकि किसी ने यह सुनिश्चित करने के लिए एक परीक्षण मामला नहीं जोड़ा कि ऐसा नहीं हुआ। या कोई कोड का एक बड़ा टुकड़ा देखता है, और कहता है "मुझे नहीं पता कि यह क्या करना है, क्योंकि यह दस्तावेज नहीं है और कोई परीक्षण नहीं है ... अगर मैं इस बग को ठीक करता हूं, तो मुझे नहीं पता कि क्या मैं इसके आधार पर कुछ और तोड़ूंगा; शायद मैं इसे खरोंच से फिर से लिखूंगा। "
यूनिट परीक्षण इन मामलों में सभी अतिरिक्त काम को कम करते हैं। उन्हें मज़ेदार बनाने का सबसे अच्छा तरीका यह सुनिश्चित करना है कि लोग उन सभी कार्यों को समझें जो वे बदल रहे हैं, और अतिरिक्त लचीलापन जो यह जानने से आता है कि प्रत्येक कोड को क्या करना चाहिए। कुछ हद तक, लोगों को लिखने के साथ थोड़ा और अनुभव करने की आवश्यकता है और यह समझने के लिए कि एक महत्वपूर्ण कोड परीक्षण कितना महत्वपूर्ण हो सकता है; अगर उनके सभी कोड वे एक बार लिखते हैं और फेंक देते हैं, तो वे कभी भी इसे प्राप्त नहीं करेंगे।
और यूनिट परीक्षणों को इस तथ्य के बाद नहीं लिखा जाना चाहिए, क्योंकि आपके पास पहले से ही काम करने वाले "पता" के कोड होने के बाद एक अतिरिक्त कोर के रूप में। इकाई परीक्षण पहले लिखे जाने चाहिए, या बहुत कम से कम (चूंकि आप कभी-कभी कोड लिखना भूल जाते हैं) प्रश्न में कोड लिखने के ठीक बाद। इसे परीक्षण-संचालित विकास कहा जाता है, और यह आपके एपीआई को बेहतर बनाने में मदद कर सकता है; यदि आप पहले एपीआई का उपयोग करने वाले परीक्षण लिखते हैं, तो आप सीखेंगे कि एपीआई को कोड लिखने से पहले उपयोग करने के लिए दर्द कहाँ है, और यदि आप केवल परीक्षणों को जोड़ते हैं तो इससे कहीं अधिक आसानी से पुनः डिज़ाइन कर सकते हैं।
MbUnit
पुस्तकालय मेरे जीवन बदल गया है। ऑटो परीक्षण महत्वपूर्ण है। ऑटो टेस्टिंग से समय की बचत होती है। ऑटो टेस्टिंग से पैसा बचता है। ऑटो टेस्टिंग जान बचा सकती है। ऑटो टेस्टिंग ही एकमात्र तरीका है। ऑटो-टेस्टिंग अभी तक एक और सुरक्षा जाल है। जब मैं एक विशाल वास्तुकला पर काम करने वाले 50 लोगों में से एक हूं, तो मुझे लगता है कि एक दीवार में अभी तक एक और ईंट है। यूनिट परीक्षणों के साथ मैं नियंत्रण में हूं।