क्या आधार कक्षाओं के परीक्षण से बचना ठीक है?


15

मेरे पास "मेटा प्रोग्रामिंग" की उचित मात्रा के साथ एक बेस क्लास है ताकि इसे लचीलापन / अमूर्त दिया जा सके, बल्कि इसे सामान्य होना चाहिए।

बेस क्लास में सामान्य विधियों का उपयोग करके मेरे पास बहुत सारे उपवर्ग हैं, और मेरे पास प्रत्येक उपवर्ग में सभी मामलों को कवर करने वाला व्यवहार उन्मुख इकाई परीक्षण है।

क्या आधार वर्ग का परीक्षण छोड़ना ठीक है?


1
एक चीज जो मैं कभी-कभी करता हूं जब मैं खुद से पूछना शुरू करता हूं तो यह प्रश्न कोड को तोड़ने की कोशिश करता है। उस पर अमान्य इनपुट फेंको, गलत कॉन्फ़िगरेशन मान निर्दिष्ट करें, आदि
Zymus

जवाबों:


31

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

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

"सीधे अपने आधार वर्ग का परीक्षण" करने का एक और संभावित कारण यह है कि आप "अलगाव में" उस वर्ग के एक विशिष्ट कार्य का परीक्षण करना चाहते हैं। कभी-कभी किसी विशिष्ट विधि के लिए सीधे परीक्षण मामलों को डिजाइन करना आसान हो सकता है, बजाय इसके कि उप-विधि के तरीकों को कॉल करके अप्रत्यक्ष रूप से उस पद्धति का परीक्षण करें जो उस पद्धति का उपयोग करते हैं।

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


हां, मैं बेस क्लास पर प्रत्यक्ष इकाई परीक्षणों के साथ अधिक मूर्त रूप से परिभाषित तरीकों के लिए सहमत हूं। जब से मैं नहीं करना चाहता था, सब कुछ मेटा-प्रोग्रामिंग का परीक्षण कर रहा हूं, क्योंकि उप-वर्ग पर यूनिट परीक्षण उस सामान का परीक्षण करते हैं।
नाथन

4
एक ऐसा वर्ग डिजाइन करना जो आधार / सार वर्ग का विस्तार करता है जो केवल परीक्षण निर्देशिका के भीतर मौजूद होता है और केवल आधार वर्ग के उचित कवरेज को प्राप्त करने के लिए आधार वर्ग को उजागर / त्वरित करने के लिए कार्य करता है और अंतर्निहित तरीकों का आश्वासन देता है कि अंतर्निहित तरीके उन अधिक जटिल वर्गों के अलगाव में सही ढंग से काम कर रहे हैं जो उपयोग किए जाते हैं।

@ मिचेल्ट: हाँ। क्या मेरा जवाब ऐसा लगता है जैसे मेरे पास इसके बारे में एक अलग राय है?
डॉक ब्राउन

@DocBrown बिल्कुल नहीं - आपने स्पष्ट रूप से उस बिंदु को स्पष्ट किया। मैं केवल अतिरिक्त स्पष्टीकरण जोड़ रहा था जो मैंने अपने उत्तर में लिखा होगा (यदि आपने पहले ही ऐसा नहीं कहा था)। मैं ऐसा उत्तर नहीं लिखना चाहता जो शुरू हो गया हो "मैं डॉक्टर की हर बात से सहमत हूं, लेकिन विशेष रूप से बाहर बुलाकर और अधिक लिखना चाहता हूं ..."

2

प्रोग्रामर के लाभ के लिए स्वचालित परीक्षण बनाया गया था, परीक्षणों की सेवा के लिए प्रोग्रामर नहीं बनाए गए थे।

हमारे पास हमें अधिक उत्पादक बनाने और ग्राहकों की शिकायत करने वाले "मुद्दों" की संख्या को कम करने के लिए परीक्षण हैं।

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

फिर हमें यह पूछने के लिए छोड़ दिया जाता है कि क्या परीक्षण आपको अधिक उत्पादक बना देगा । यह कुछ तरीकों से हो सकता है।

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

इसलिए यह देखते हुए कि उप-वर्ग काम कर रहे हैं, मुझे आधार वर्ग के लिए प्रत्यक्ष परीक्षण लिखने का कोई मतलब नहीं दिखता है। यह दिन नहीं है, कि इन परीक्षणों को प्रारंभिक अवस्था में लिखने के लाभ नहीं होंगे।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.