मैं निर्भरता इंजेक्शन का उपयोग करके अपनी कक्षाओं को इकाई-परीक्षण योग्य बनाने पर काम कर रहा हूं। लेकिन इन वर्गों में से कुछ के पास बहुत सारे ग्राहक हैं, और मैं उन सभी को वापस करने के लिए तैयार नहीं हूं जो अभी तक निर्भरता में गुजरना शुरू कर रहे हैं। इसलिए मैं इसे धीरे-धीरे करने की कोशिश कर रहा हूं; अभी के लिए डिफ़ॉल्ट निर्भरता रखते हुए, लेकिन उन्हें परीक्षण के लिए ओवरराइड करने की अनुमति देता है।
एक दृष्टिकोण जो मैं बता रहा हूं, वह सभी "नए" कॉल को अपने तरीकों से आगे बढ़ा रहा है, जैसे:
public MyObject createMyObject(args) {
return new MyObject(args);
}
फिर मेरी यूनिट परीक्षणों में, मैं इस वर्ग को केवल उपवर्ग कर सकता हूं, और बनाए गए कार्यों को ओवरराइड कर सकता हूं, इसलिए वे इसके बजाय नकली ऑब्जेक्ट बनाते हैं।
क्या यह एक अच्छा तरीका है? क्या कोई नुकसान हैं?
अधिक आम तौर पर, जब तक आप उन्हें परीक्षण के लिए बदल सकते हैं, तब तक हार्ड-कोडित निर्भरताएं रखना ठीक है? मुझे पता है कि पसंदीदा दृष्टिकोण स्पष्ट रूप से उन्हें कंस्ट्रक्टर में आवश्यक है, और मैं वहां अंततः प्राप्त करना चाहता हूं। लेकिन मैं सोच रहा हूं कि क्या यह एक अच्छा पहला कदम है।
एक नुकसान जो अभी मेरे साथ हुआ है: यदि आपके पास वास्तविक उपवर्ग हैं, जिन्हें आपको परीक्षण करने की आवश्यकता है, तो आप उस परीक्षण उपवर्ग का पुन: उपयोग नहीं कर सकते जो आपने मूल वर्ग के लिए लिखा था। आपको प्रत्येक वास्तविक उपवर्ग के लिए एक परीक्षण उपवर्ग बनाना होगा, और इसे बनाने के कार्यों को ओवरराइड करना होगा।