मौजूदा उत्तर निश्चित रूप से अच्छे हैं, लेकिन मैंने किसी को भी प्रश्न में इस मूलभूत गलत धारणा को संबोधित नहीं किया है:
किसी भी समय सभी इकाई परीक्षणों में उत्तीर्ण होना चाहिए
नहीं। अधिकांश आश्वस्त रूप से, यह सच नहीं होगा। जबकि मैं सॉफ्टवेयर विकसित कर रहा हूं, NCrunch सबसे अधिक बार या तो भूरा होता है (बिल्ड विफलता) या लाल (असफल परीक्षण)।
जहाँ NCrunch को हरा होना चाहिए (सभी परीक्षण पास करना) है जब मैं स्रोत नियंत्रण सर्वर के लिए प्रतिबद्ध करने के लिए तैयार हूं, क्योंकि उस बिंदु पर अन्य मेरे कोड पर निर्भरता ले सकते हैं।
यह नए परीक्षण बनाने के विषय में भी फीड करता है: परीक्षणों को कोड के तर्क और व्यवहार पर जोर देना चाहिए। सीमा की स्थिति, गलती की स्थिति, आदि जब मैं नए परीक्षण लिखता हूं, तो मैं कोड में इन "हॉट स्पॉट" को पहचानने की कोशिश करता हूं।
यूनिट परीक्षण दस्तावेज़ मैं अपने कोड को कैसे कहा जाता है की उम्मीद है - पूर्व शर्त, अपेक्षित आउटपुट, आदि।
यदि कोई बदलाव के बाद एक परीक्षण टूट जाता है, तो मुझे यह तय करने की आवश्यकता है कि क्या कोड या परीक्षण त्रुटि है।
एक साइड नोट के रूप में, यूनिट परीक्षण कभी-कभी टेस्ट ड्रिवेन डेवलपमेंट के साथ हाथ से हाथ जाता है। टीडीडी के सिद्धांतों में से एक यह है कि टूटे हुए परीक्षण आपके गाइडपोस्ट हैं। जब कोई परीक्षा विफल हो जाती है, तो आपको कोड को ठीक करने की आवश्यकता होती है ताकि परीक्षण पास हो जाए। इस सप्ताह के शुरू से एक ठोस उदाहरण यहाँ दिया गया है:
पृष्ठभूमि : मैंने लिखा है और अब हमारे डेवलपर्स द्वारा उपयोग की जाने वाली लाइब्रेरी का समर्थन करते हैं जो कि ओरेकल प्रश्नों को मान्य करने के लिए उपयोग किया जाता है। हमारे पास यह परीक्षण था कि क्वेरी ने कुछ अपेक्षित मूल्य का मिलान किया, जिससे मामला महत्वपूर्ण हो गया (यह ओरेकल में नहीं है) और जब तक वे पूरी तरह से अपेक्षित मूल्य से मेल नहीं खाते, तब तक अमान्य प्रश्नों को मंजूरी दे दी।
इसके बजाय, मेरी लाइब्रेरी Antlr और Oracle 12c सिंटैक्स का उपयोग करते हुए क्वेरी को पार्स करती है, और फिर सिंटैक्स ट्री पर विभिन्न अभिक्रियाओं को लपेटता है। जैसी चीजें, यह मान्य है (कोई पार्स त्रुटियां नहीं उठाया गया था), इसके सभी पैरामीटर पैरामीटर संग्रह से संतुष्ट हैं, डेटा रीडर द्वारा पढ़े गए सभी अपेक्षित कॉलम क्वेरी में मौजूद हैं, आदि ये सभी आइटम हैं जो कि माध्यम से फिसल गए हैं विभिन्न समय पर उत्पादन।
मेरे एक साथी इंजीनियर ने सोमवार को मुझे एक प्रश्न भेजा था जो सप्ताहांत में विफल हो गया था (या बल्कि, सफल हो गया था)। मेरी लाइब्रेरी ने कहा कि सिंटैक्स ठीक था, लेकिन जब सर्वर ने इसे चलाने की कोशिश की तो यह उड़ गया। और जब उन्होंने क्वेरी को देखा, तो यह स्पष्ट था कि:
UPDATE my_table(
SET column_1 = 'MyValue'
WHERE id_column = 123;
मैंने प्रोजेक्ट को लोड किया और एक यूनिट टेस्ट जोड़ा, जिसमें कहा गया था कि यह क्वेरी मान्य नहीं होनी चाहिए। जाहिर है, परीक्षण विफल रहा।
अगला, मैंने असफल परीक्षण को डिबग किया, उस कोड के माध्यम से कदम रखा जहां मुझे उम्मीद थी कि वह अपवाद को फेंक देगा, और यह पता लगाया कि एंट्रेल खुले परन पर एक त्रुटि उठा रहा था , बस एक तरह से पिछले कोड की उम्मीद नहीं थी। मैंने कोड को संशोधित किया, सत्यापित किया कि परीक्षण अब हरा था (गुजर रहा था) और कोई भी अन्य प्रक्रिया में टूट गया था, प्रतिबद्ध था, और धक्का दिया था।
इसमें शायद 20 मिनट लगे, और इस प्रक्रिया में मैंने वास्तव में पुस्तकालय में काफी सुधार किया क्योंकि यह अब त्रुटियों की एक पूरी श्रृंखला का समर्थन करता है जो पहले इसे अनदेखा कर रहा था। अगर मेरे पास पुस्तकालय के लिए इकाई परीक्षण नहीं थे, तो इस मुद्दे पर शोध करना और इसे ठीक करना घंटों लग सकता था।