यूनिट परीक्षण विशेषताओं को आम तौर पर सार्वजनिक तरीकों की आवश्यकता क्यों होती है?


12

मैंने हाल ही में नोट किया कि एक .NET असेंबली में संरक्षित विधि में [TestInitialize] को जोड़ने का सम्मान नहीं किया गया था, लेकिन अगर मैंने विधि को सार्वजनिक किया तो इसे यूनिट टेस्ट धावक (इस मामले में Resharper) कहा गया। मैंने पूर्व में कई बार परीक्षण विधियों के साथ इस पर ध्यान दिया है।

तकनीकी रूप से बोलना, अपनी निजी पद्धति को सार्वजनिक विधि के रूप में दर्शाना आसान है। तथ्य की बात के रूप में, प्रतिबिंब एक विधि है जो इकाई परीक्षण निजी विधियों को नियोजित करती है।

तो मुझे अपनी सभी इकाई परीक्षण विधियों को सार्वजनिक करने की आवश्यकता क्यों है?


2
यह वास्तव में एक अच्छा सवाल है। एकमात्र अच्छा तर्क मैंने सुना है कि यह सिद्धांत का अनुसरण करता है "एक अंतरफलक के लिए कार्यक्रम, कार्यान्वयन के लिए नहीं," ठोस सिद्धांतों का हिस्सा।
रॉबर्ट हार्वे

9
मुझे नहीं लगता कि वह अपनी कक्षाओं के परीक्षण के बारे में बात कर रहा है, वह वास्तविक परीक्षण विधियों के बारे में बात कर रहा है जिन्हें परीक्षण ढांचे द्वारा कहा जाता है।
19

1
जावा में @RobertHarvey, इसी तरह के प्रतिबंध का कारण (उदाहरण के लिए JUnit) यह है कि फ्रेमवर्क डिज़ाइनर गड़बड़ नहीं करना चाहते हैं, setAccessibleजिसे कुछ कस्टम सुरक्षा
प्रबंधक

1
आपको यह ध्यान में रखना होगा कि यह डिज़ाइन निर्णय व्यापक उपयोग के लिए लक्षित एक सामान्य उद्देश्य ढांचे के लिए किया गया था। इस तरह के मामलों में यह डिजाइनर के लिए मान लेना और सबसे खराब करने के लिए तैयार करना अधिक सुरक्षित है। यदि यह था, तो मुझे नहीं पता, कुछ कंपनी-आंतरिक ढांचे (जहां किसी को वांछित सुरक्षा नीतियों की गारंटी देने का मौका हो सकता है), या यदि यह संकीर्ण, विशेष उद्देश्य के कुछ उपकरण था ("दुर्गम सदस्यों के लिए दर्शक"), डिजाइनर अन्य विकल्पों पर विचार करना होगा
gnat

2
@GregBurghardt यह व्यवहार Nunit में पाया गया है, और शायद अन्य परीक्षण रूपरेखा Microsoft ने नहीं लिखा था। इस प्रश्न को पूछने के बाद के वर्षों में निश्चित रूप से मैं .NET के बारे में बहुत कुछ समझता हूं, लेकिन मुझे अभी भी इसका उचित सवाल लगता है, और टिप्पणियों में कुछ अच्छी चर्चा है।
जस्टिन डियरिंग

जवाबों:


2

आपको परीक्षण करना चाहिए कि वर्ग क्या करता है , न कि यह कैसे करता है।

जहां तक ​​"आउटसाइड वर्ल्ड" का सवाल है, तो वह जो भी वर्ग सार्वजनिक रूप से उपलब्ध कराता है; आपका परीक्षण ढांचा एक ही धारणा बना रहा है।

पब्लिक से कुछ भी कम "" का परीक्षण करके, आप वर्ग के आंतरिक कार्यान्वयन में देरी कर रहे हैं, जो एक बुरा विचार है।


ध्यान दें कि प्रश्न परीक्षण विधियों के बारे में है, न कि परीक्षण के तहत प्रणाली के तरीकों पर। हालांकि यह सच है कि ओपी का तर्क है कि आप सार्वजनिक की तुलना में "कम" चीजों का परीक्षण करने के लिए प्रतिबिंब का उपयोग कर सकते हैं, यह निजी तरीकों का उपयोग करने के लिए परीक्षण ढांचे की क्षमता के बारे में एक तर्क है। परीक्षण ढांचे में परीक्षण विधियों को खोजने के लिए परावर्तन का उपयोग किया जाता है (जो कि एक विशेषता द्वारा चिह्नित हैं), और इस प्रकार प्रतिबिंब का उपयोग करना होगा, इस बात को ध्यान में रखते हुए ... "मुझे अपनी सभी इकाई परीक्षण विधियों को सार्वजनिक करने की आवश्यकता क्यों है?"
थरोट

टेस्ट विधियों में निजी तरीकों तक पहुंचने की क्षमता है; प्रतिबिंब के साथ, कुछ भी संभव है। मैं इस सवाल को [संयुक्त राष्ट्र] ऐसा करने की वांछनीयता के बारे में अधिक देखता हूं।
फिल डब्ल्यू।

0

एक सामान्य नियम के रूप में, यह केवल सार्वजनिक विधियों तक पहुँचने के लिए सबसे अच्छा है - जब आप एक वर्ग बनाते हैं, तो आप वह अनुबंध भी बना रहे हैं जिसके तहत अन्य वर्गों को अपने कोड तक पहुंचना चाहिए। तो इसका जवाब सबसे अधिक संभावना है क्योंकि यह एक सम्मेलन है।


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