2011-06-08 20 views
8

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

अब परीक्षण में, मैं चीजों को जानना चाहूंगा: क्या खोज पहले तत्व, अंतिम तत्व और अन्य तत्वों को ढूंढती है? क्या खोज सही ढंग से यूनिकोड वर्णों की तुलना करता है। क्या खोज संभाल प्रतीक और अन्य "दर्दनाक" पात्र हैं। क्या यूनिट परीक्षण इसे कवर करेगा, या क्या मैं इसे याद कर रहा हूं? आप मेरी बाइनरी खोज के लिए यूनिट परीक्षण कैसे लिखेंगे?

function search(collection, value){ 
var start = 0, end = collection.length - 1, mid; 
while (start <= end) { 
    mid = start + ((end - start)/2); 
    if (value == collection[mid]) 
    return mid; 
    if (collection[mid] < value) 
    end = mid - 1; 
    else 
     start = mid + 1; 
} 
return mid; 
} 

इकाई परीक्षणों के लिए Psuedo कोड सुंदर होगा।

तो, हम हो सकता है:

function testFirst(){ 
var collection = ['a','b','c','x','y','z'],first = 'a', findex = 0; 
assert(seach(collection,first),findex); 
} 
function testLast(){ 
var collection = ['a','b','c','x','y','z'], last = 'z', lindex = 5; 
assert(seach(collection,last),lindex); 
} 

उत्तर

2

आप इकाई परीक्षण की अपनी अपेक्षाओं में सही हैं; यह अपेक्षित व्यवहार को सत्यापित करने और सत्यापित करने के बारे में बहुत कुछ है।

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

यूनिट टेस्ट का वास्तविक मूल्य, मेरी राय में, वह समय के साथ प्राप्त मूल्य है। यह मान दो रूप लेता है; दस्तावेज मूल्य और सत्यापन मान।

प्रलेखन मान इकाई परीक्षण का मूल्य कहता है, "यह कोड कोड के लेखक ने कोड के इस बिट की अपेक्षा की है"। इस तरह के सामान के मूल्य को खत्म करना मुश्किल है; जब आप ऐसी परियोजना पर रहे हैं जिसमें अंडर-डॉक्यूमेंटेड विरासत कोड का एक बड़ा हिस्सा है, तो मैं आपको बता दूं कि इस प्रकार का दस्तावेज मूल्य चमत्कार जैसा है।

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

3

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

2

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

अपने मामले में, कुछ विशेष मानों (या कोई मान नहीं) के साथ 'संग्रह' सेट अप करना पूर्व शर्त निर्धारित कर रहा है।

किसी विशेष पैरामीटर के साथ अपनी खोज विधि को कॉल करना परीक्षण के तहत कोड चला रहा है।

यह जांचना कि आपके विधि द्वारा लौटाए गए मूल्य से मेल खाता है जो आप उम्मीद करते हैं।

उन तीन चीजों को एक नाम दें जो वर्णन करता है कि आप क्या करने की कोशिश कर रहे हैं (क्या TheSearchMethodFailIfCollectionIsEmpty) और voila आपके पास यूनिट टेस्ट है।

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