2009-07-14 9 views
5

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

उत्तर

7

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

7

मुझे लगता है कि आपके पास वास्तव में 2 अलग-अलग प्रश्न हैं।

पहला पैरामीटर इनपुट सत्यापन के लिए सबसे अच्छा अभ्यास है और दूसरा इन स्थितियों के लिए आपके यूनिट टेस्ट हैंडल परीक्षण होना चाहिए।

मैं अनुशंसा करता हूं कि आप या तो पैरामीटर के लिए एक तर्क अपवाद फेंक दें जो आपके फ़ंक्शन या किसी अन्य चर/संदेश को सही ढंग से प्रदान नहीं किया गया था जो स्थिति के कॉलिंग फ़ंक्शन/उपयोगकर्ता को सूचित करता है। आम तौर पर, आप अपवाद फेंकना नहीं चाहते हैं और जब आप जानते हैं कि वे असफल हो जाएंगे तो कार्यों को भी बुलाए जाने से रोकने की कोशिश करनी चाहिए।

अपने यूनिट परीक्षण के लिए, आपको निश्चित रूप से एक पूर्ण परिणाम होने के लिए नल मूल्य परीक्षण शामिल करना चाहिए।

+1

मैं इससे सहमत हूं। पैरामीटर परीक्षण कार्यों/विधियों * स्वयं * जहां भी एप्रोपिएट (यानी लगभग हर समय) में किया जाना चाहिए। – Noldorin

1

जावास्क्रिप्ट instanceof और typeof है कि आप की जाँच वस्तुओं की किस तरह अपने कार्यों के लिए पारित किया जा रहा है मदद कर सकते हैं:

'undefined' == typeof noVariable; // true 
var noVariable = null; 
'undefined' == typeof noVariable; // false 
typeof noVariable; // 'object' 
noVariable === null; // true 

var myArray = []; 
typeof myArray; // 'object' 
myArray instanceof Object; // true 
myArray instanceof Array; // true 

var myObject = {}; 
typeof myObject; // 'object' 
myObject instanceof Object; // true 
myObject instanceof Array; // false 

आप इन के लिए कुछ डिफ़ॉल्ट "बुरा" मूल्यों को निर्धारित करने के लिए उपयोग कर सकते हैं अपने उदाहरण चर:

function myFunction(foo,bar) { 
    foo = foo instanceof Array ? foo : []; // If 'foo' is not an array, make it an empty one 
    bar = bar instanceof Number ? bar : 0; 

    // This loop should always exit without error, although it may never do a single iteration 
    for (var i=0; i<foo.length; i++) { 
     console.log(foo[i]); 
    } 

    // Should never fail 
    bar++; 
} 

या ऑपरेटर भी बहुत उपयोगी है:

function myFunction(blat) { 
    var blat = blat||null; // If 'blat' is 0, '', undefined, NaN, or null, force it to be null 

    // You can be sure that 'blat' will be at least *some* kind of object inside this block 
    if (null!==blat) { 
    } 
} 
+1

foo एक सरणी होने पर सत्य बराबर होगा? –

+0

हूप्सि। हां, 'foo/bar' उदाहरण borked है। उत्तर के लिए इसे देखने वाले लोगों के लिए, ** या ** '|| 'ऑपरेटरों को एक टर्नरी अभिव्यक्ति के साथ प्रतिस्थापित करें:' (foo exampleof Array)? foo: [] '। – shuckster

0

इसके अलावा, यह न भूलें कि जावास्क्रिप्ट के साथ आप अपेक्षित संख्याओं की तुलना में कम या उससे अधिक में गुजर सकते हैं। यदि आप चाहें तो आप उसे भी देख सकते हैं।

0

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

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

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