मैं इसे पुन: सक्रिय करने का सुझाव देता हूं।
मैंने जो जानकारी देखी है, वह यह सुझाव दे रहा है कि निजी परीक्षणों की जांच करने की इच्छा कोड गंध हो सकती है। कुछ लोग सुझाव देते हैं कि यह एक संकेत हो सकता है कि इसे एक अलग वर्ग में पुन: सक्रिय किया जाना चाहिए और सार्वजनिक किया जाना चाहिए।
आपने अपने प्रश्न में इसके खिलाफ और इसके खिलाफ विभिन्न कारणों को शामिल किया है, तो आप तर्कों के बारे में अच्छी तरह से जानते हैं। लेकिन आपके पास एक विधि है जो जटिल लगती है और इसमें बाहरी एपीआई शामिल है। यह अपने आप पर परीक्षण करने लायक है।removeInvalidOperations()
अभी भी कक्षा में एक निजी विधि हो सकती है, लेकिन यह मूल रूप से किसी अन्य निर्भरता के लिए प्रतिनिधि होगी।
class YourClass
{
private OperationRemover remover;
public void addKeywords() {
// whatever
removeInvalidOperations();
}
private void removeInvalidOperations() {
remover.remove();
}
}
यह आप वास्तव में एक बाहरी API कॉल है, जो कि विधि आसान परीक्षण होगा रखने के बिना अपने addKeywords()
विधि का परीक्षण करने में सक्षम होने सहित कुछ बिंदु पर इस निर्भरता को बदलने के लिए, सक्षम होने का अतिरिक्त लाभ देता है।OperationRemover
एक इंटरफ़ेस हो सकता है, उदाहरण के लिए, और परीक्षण उद्देश्यों के लिए, आप उत्पादन में उपयोग किए गए ठोस संस्करण की बजाय बस अपने स्थान पर एक स्टब में गुजरते हैं। आपके ठोस संस्करण के लिए, आप अपने मौजूदा वर्ग के साथ क्या हो रहा है इसके स्वतंत्र रूप से इसके लिए परीक्षण लिख सकते हैं।
मैं वास्तव में नहीं दिख रहा है यही कारण है कि मैं अपने वर्तमान कोड डिजाइन, साथ एक समस्या है, लेकिन यह भी मेरी उत्पादन कोड संपादन मेरी परीक्षण आवश्यकताओं के अनुरूप करने के विचार पसंद नहीं है।
आसान परीक्षण योग्यता एक साइड-लाभ है। इसे एक और तरीके से देखें: आप वास्तव में क्या कर रहे हैं कोड को कम-से-कम और विस्तारित बना रहा है। ऊपर, हमने कोड को बाहरी एपीआई से कोड से अलग कर दिया है जिसके परिणामस्वरूप उपयोग करने की आवश्यकता हो सकती है। बाहरी एपीआई बदल सकता है। आप एक सेवा से दूसरे में जा सकते हैं, लेकिन परिणाम का उपयोग करने वाले कोड को परवाह नहीं है। वह वर्ग वही रह सकता है, केवल उस वर्ग को जो वास्तव में कॉल करता है उसे संशोधित करने की आवश्यकता होती है (या प्रतिस्थापित)।
असली दुनिया का उदाहरण: वर्ष 2007 है और आप संयुक्त राज्य अमेरिका में एक बड़े वित्तीय केंद्र में बैंक के लिए काम करते हैं। आपके आवेदन को खाता जानकारी का उपयोग करने की आवश्यकता है। आपका कोड बैंक के अंदर किसी प्रकार की वेब सेवा तक पहुंच जाता है और इसकी आवश्यकता के आकार में आवश्यक जानकारी प्राप्त करता है, फिर इसके प्रसंस्करण के बारे में चलता है। 2008 में, अमेरिकी वित्तीय क्षेत्र implodes, और आपके बैंक (जो पतन के कगार पर है) एक और बैंक द्वारा gobbled है। आपका आवेदन बचाया गया है, सिवाय इसके कि आपको एक अलग एपीआई तक पहुंचना है जो पहले से ही जीवित बैंक के भीतर मौजूद है, वहां से खाता जानकारी प्राप्त करने के लिए। क्या इस खाते की जानकारी का उपभोग करने वाला कोड बदलना चाहिए? जरुरी नहीं। यह पहले से ही एक अलग स्रोत से एक ही खाता जानकारी है। नहीं, सभी को बदलने की जरूरत है एपीआई का आह्वान कार्यान्वयन। उपभोग कोड को कभी नहीं पता होना चाहिए।
तथ्य यह है कि इस तरह के ढीले युग्मन परीक्षण को बढ़ावा देता है और सुविधा प्रदान करता है एक बोनस है।
एक त्वरित फिक्स जिसे मैंने अक्सर उपयोग किया है, निजी से डिफ़ॉल्ट (पैकेज) तक पहुंच को बदलने और केवल यूनिट परीक्षणों के लिए // // पैकेज पहुंच को टिप्पणी करना है। 'क्या यह स्वीकार्य है आपके कोडिंग मानकों पर निर्भर करता है और आप कितना भरोसा करते हैं आपके साथी प्रोग्रामर यह समझने के लिए कि इस विधि, भले ही पैकेज एक्सेस, "असली एपीआई" नहीं है। – user949300