मेरे पास एक कंकाल कार्यान्वयन है, जैसा कि प्रभावी जावा से आइटम 18 में (विस्तारित चर्चा यहां )। यह एक अमूर्त वर्ग है जो 2 सार्वजनिक विधियों मेथड () और मेथडब () प्रदान करता है जो उपवर्गों को "अंतराल को भरने" के लिए कॉल करता है जिसे मैं सार तरीके से परिभाषित नहीं कर सकता।
मैंने इसे पहले एक ठोस वर्ग और इसके लिए इकाई परीक्षण लिखकर विकसित किया। जब दूसरी श्रेणी आई, तो मैं सामान्य व्यवहार को निकालने में सक्षम था, दूसरी कक्षा में "लापता अंतराल" को लागू करता था और यह तैयार था (निश्चित रूप से, दूसरे उपवर्ग के लिए इकाई परीक्षण बनाए गए थे)।
समय बीतता गया और अब मेरे पास 4 उपवर्ग हैं, जिनमें से प्रत्येक में 3 छोटे संरक्षित तरीके हैं जो उनके ठोस कार्यान्वयन के लिए बहुत विशिष्ट हैं, जबकि कंकाल का कार्यान्वयन सभी सामान्य कार्य करता है।
मेरी समस्या यह है कि जब मैं एक नया कार्यान्वयन बनाता हूं, मैं सभी परीक्षणों को फिर से लिखता हूं:
- क्या उपवर्ग किसी दिए गए आवश्यक तरीके को कहता है?
- क्या किसी दिए गए तरीके में एक एनोटेशन है?
- क्या मुझे विधि A से अपेक्षित परिणाम मिलेंगे?
- क्या मुझे विधि B से अपेक्षित परिणाम प्राप्त होंगे?
इस दृष्टिकोण के साथ लाभ देखें:
- यह परीक्षणों के माध्यम से उपवर्ग आवश्यकताओं का दस्तावेज बनाता है
- समस्या निवारण के मामले में यह तेजी से विफल हो सकता है
- उपवर्ग को एक पूरे के रूप में और उनके सार्वजनिक एपीआई के माध्यम से परीक्षण करें ("मेथोडा () काम करता है?" और "संरक्षित पद्धति से काम नहीं करता है?")
मेरे पास समस्या यह है कि एक नए उपवर्ग के लिए परीक्षण मूल रूप से एक नो-ब्रेनर हैं: - परीक्षण सभी उपवर्गों में सभी समान हैं, वे सिर्फ रिटर्न प्रकार के तरीकों को बदलते हैं (कंकाल कार्यान्वयन सामान्य है) और गुण I परीक्षण के मुखर भाग पर जाँच करें। - आमतौर पर उपवर्गों के पास कोई परीक्षण नहीं है जो उनके लिए विशिष्ट हैं
मुझे पसंद है कि जिस तरह से परीक्षण उपवर्ग के परिणाम पर ध्यान केंद्रित करते हैं और इसे रीफैक्टरिंग से बचाते हैं, लेकिन यह तथ्य कि परीक्षण को लागू करना "मैनुअल काम" बन गया, मुझे लगता है कि मैं कुछ गलत कर रहा हूं।
वर्ग पदानुक्रम का परीक्षण करते समय क्या यह समस्या आम है? मैं इससे कैसे बच सकता हूं?
ps: मैंने कंकाल वर्ग के परीक्षण के बारे में सोचा था, लेकिन यह भी अजीब लगता है कि यह परीक्षण करने में सक्षम होने के लिए एक अमूर्त वर्ग का नकली बनाना। और मुझे लगता है कि उपवर्ग द्वारा अपेक्षित व्यवहार को बदलने वाले अमूर्त वर्ग पर किसी भी रिफैक्टिंग को उतनी तेजी से नहीं देखा जाएगा। मेरी हिम्मत मुझे बताती है कि उपवर्ग का परीक्षण "एक पूरे के रूप में" यहां पसंदीदा तरीका है, लेकिन कृपया मुझे यह बताने के लिए स्वतंत्र महसूस करें कि मैं बहुत अच्छा हूं :)
ps2: मैंने googled और इस विषय के बारे में कई सवाल किए हैं। उनमें से एक यह है जो निगेल थॉर्न का एक बड़ा जवाब है, मेरा मामला उसका "नंबर 1" होगा। यह बहुत अच्छा होगा, लेकिन मैं इस बिंदु पर विचार नहीं कर सकता, इसलिए मुझे इस समस्या के साथ रहना होगा। अगर मैं रिफ्लेक्टर कर सकता हूं, तो मेरे पास रणनीति के रूप में प्रत्येक उपवर्ग होगा। यह ठीक होगा, लेकिन मैं अभी भी "मुख्य वर्ग" का परीक्षण करूंगा और रणनीतियों का परीक्षण करूंगा, लेकिन मैं किसी भी रिफैक्टिंग को नोटिस नहीं करूंगा जो मुख्य वर्ग और रणनीतियों के बीच एकीकरण को तोड़ता है।
ps3: मुझे यह कहते हुए कुछ उत्तर मिले हैं कि "यह स्वीकार्य है" सार वर्ग का परीक्षण करने के लिए। मैं मानता हूं कि यह स्वीकार्य है, लेकिन मैं जानना चाहूंगा कि इस मामले में पसंदीदा तरीका क्या है (मैं अभी भी यूनिट परीक्षणों के साथ शुरू कर रहा हूं)