सी ++ में, मैंने अक्सर यूनिट टेस्ट क्लास को कक्षा के एक दोस्त बना दिया है जिसका परीक्षण मैं कर रहा हूं। मैं ऐसा इसलिए करता हूं क्योंकि मुझे कभी-कभी किसी निजी विधि के लिए यूनिट टेस्ट लिखने की आवश्यकता महसूस होती है, या शायद मैं कुछ निजी सदस्य तक पहुंच चाहता हूं ताकि मैं ऑब्जेक्ट की स्थिति को आसानी से सेटअप कर सकूं ताकि मैं इसका परीक्षण कर सकूं। मेरे लिए यह encapsulation और abstraction को संरक्षित करने में मदद करता है क्योंकि मैं कक्षा के सार्वजनिक या संरक्षित इंटरफ़ेस को संशोधित नहीं कर रहा हूं।यूनिट परीक्षण करने वाले वर्ग के किसी मित्र को परीक्षण करने में क्या गलत है?
यदि मैं कोई तृतीय पक्ष लाइब्रेरी खरीदता हूं, तो मैं नहीं चाहता कि सार्वजनिक सार्वजनिक तरीकों के समूह के साथ इसका सार्वजनिक इंटरफ़ेस प्रदूषित हो जाए, मुझे केवल इस बारे में जानने की आवश्यकता नहीं है क्योंकि विक्रेता इकाई परीक्षण करना चाहता था!
न ही मुझे संरक्षित सदस्यों के समूह के बारे में चिंता करना है कि मुझे यह जानने की आवश्यकता नहीं है कि मुझे कक्षा से विरासत मिल रही है या नहीं।
यही कारण है कि मैं कहता हूं कि यह अमूर्तता और encapsulation को संरक्षित करता है।
मेरी नई नौकरी पर वे यूनिट परीक्षणों के लिए भी मित्र वर्गों का उपयोग करने के खिलाफ फंस गए। वे कहते हैं क्योंकि कक्षा को परीक्षणों के बारे में कुछ भी नहीं पता होना चाहिए और आप कक्षा और उसके परीक्षण के तंग युग्मन को नहीं चाहते हैं।
क्या कोई मुझे इन कारणों को और अधिक समझा सकता है ताकि मैं बेहतर समझ सकूं? मैं सिर्फ यह नहीं देखता कि यूनिट परीक्षणों के लिए किसी मित्र का उपयोग क्यों खराब है।
मुझे आश्चर्य है, अगर उन्होंने कुछ विकल्प भी पेश किए हैं? –
विकल्पों को सार्वजनिक इंटरफ़ेस का उपयोग करके विधि का आह्वान करने का एक तरीका मिल गया था; इसे संरक्षित और कक्षा का विस्तार करें; – cchampion
परीक्षणों को कसकर कोड के साथ जोड़ना नहीं चाहते हैं, यह परीक्षण करता है जैसे अच्छे इरादे गलत हो गए हैं। "सामान्य" कोड के बीच तंग युग्मन आम तौर पर कुछ टालने के लिए होता है, लेकिन परिभाषा द्वारा परीक्षण किए गए कोड के साथ परीक्षण किए जा रहे हैं। संकेत के लिए –