2009-03-03 16 views

उत्तर

15

आप परीक्षण जो शीर्ष स्तर के वर्ग 'बाहरी इंटरफ़ेस का व्यवहार निर्दिष्ट लिखें। चाहे वह कक्षा उस व्यवहार को लागू करने के लिए आंतरिक कक्षाओं का उपयोग करे या नहीं, कक्षा का कार्यान्वयन विवरण है, और परीक्षणों को इसके बारे में कुछ भी जानने की आवश्यकता नहीं है।

यदि आंतरिक वर्ग को शीर्ष-स्तरीय वर्ग 'इंटरफ़ेस के माध्यम से पर्याप्त रूप से परीक्षण नहीं किया जा सकता है, तो आंतरिक कक्षा को बाहर ले जाने और इसे सीधे शीर्ष स्तर के स्तर के रूप में जांचने के लिए सबसे अच्छा होता है। आंतरिक कक्षाओं का परीक्षण करना चाहते हैं एक कोड गंध है कि आंतरिक वर्ग एक शीर्ष-स्तरीय वर्ग होने के लिए पर्याप्त महत्वपूर्ण हो सकता है।

1

यूनिट टेस्ट के लिए एमएस विजुअल स्टूडियो का उपयोग करते समय आपको केवल private Accessor बनाना होगा। आंतरिक रूप से यह मुझे लगता है कि प्रतिबिंब के साथ काम करता है। बस जेनरेट कोड पर एक नज़र डालें।

2

आप इसे सीधे परीक्षण नहीं करते हैं। यह कक्षा के माध्यम से परीक्षण किया जाएगा जहां इसे परिभाषित किया गया है।

और, यदि आप टीडीडी लागू करते हैं, क्योंकि वर्तमान में इस प्रश्न टैग का तात्पर्य है, तो परीक्षण क्या है जिसे आप केवल एक आंतरिक वर्ग के लिए कॉल करते हैं? मेरा मतलब है कि यह एक मानक वर्ग नहीं हो सकता है, जिसका निजी स्वामित्व उस वर्ग के स्वामित्व में है जिस पर आप काम कर रहे हैं?

1

हमने एक सहायक वर्ग का उपयोग किया है जो आंतरिक वर्गों पर लोड और कॉल विधियों के प्रतिबिंब का उपयोग करता है। यह भी डीबग प्रतीक जैसे का उपयोग कर

#if DEBUG 
public 
#else 
internal 
#endif 
    class MyInternalClass 
{ 
    ... 
} 

हालांकि Esko Luontola का जवाब अधिक सही रूप में यह कार्यक्षमता या व्यापार की आवश्यकताओं को जो सबसे अधिक महत्वपूर्ण हैं है संकलन समय पर पहुँच को बदलने के लिए संभव है। महत्वपूर्ण जोखिम क्षेत्रों का परीक्षण करने के बजाय कोड कवरेज पर बहुत ध्यान केंद्रित करना आसान है।

5

ऐसा नहीं है कि मैं इसे की सलाह देते हैं, लेकिन आप भी InternalsVisibleToAttribute उपयोग कर सकते हैं।

+0

से विस्तृत व्याख्या देखें आप कहते हैं कि आप इस की सिफारिश नहीं होगा, लेकिन आप कैसे आप कुछ इस तरह का समाधान होगा? http://stackoverflow.com/questions/15440935/how-to-test-internal-class-library –

+0

@ थॉमस: बिल्कुल एस्को अपने उत्तर में बताता है। या तो आप अपने सार्वजनिक इंटरफ़ेस के माध्यम से अप्रत्यक्ष रूप से आंतरिक API का परीक्षण करते हैं, या आप अपने आंतरिक एपीआई को सार्वजनिक रूप से प्रचारित करते हैं और उन्हें सीधे परीक्षण करते हैं। –

संबंधित मुद्दे