का परीक्षण करने में सहायता के लिए उपयोग की जाने वाली सार्वजनिक विधि को छुपाएं मेरे पास रिलीज़ होने के लिए एक .NET असेंबली है। अपनी रिहाई के निर्माण में शामिल हैं:.NET असेंबली
- एक सार्वजनिक, विधियों जो लोग अन्य तरीकों, जो केवल मदद करने के लिए विधानसभा का परीक्षण में मौजूद
- एक सार्वजनिक लेकिन गैर-दस्तावेजी एपीआई का उपयोग करने की अपेक्षा की जाती के दस्तावेज एपीआई, और जो लोग
जारी करने वाली असेंबली एक कस्टम नियंत्रण है, न कि एक आवेदन। इसे पुन: परीक्षण करने के लिए, मैं इसे एक परीक्षण ढांचे/अनुप्रयोग में चलाता हूं, जो नियंत्रण (सार्वजनिक/दस्तावेज एपीआई के अतिरिक्त) कुछ उन्नत/अनियंत्रित विधियों का उपयोग करता है जिन्हें नियंत्रण से निर्यात किया जाता है।
इस तरह सार्वजनिक तरीकों जो मैं लोगों को उपयोग करने के लिए, मैं उन्हें प्रलेखन <exclude>
टैग (सैंडकैसल मदद फ़ाइल बिल्डर द्वारा समर्थित) का उपयोग कर से बाहर रखा नहीं करना चाहते, और [EditorBrowsable]
विशेषता, उदाहरण के लिए के लिए:
/// <summary>
/// Gets a <see cref="IEditorTransaction"/> instance, which helps
/// to combine several DOM edits into a single transaction, which
/// can be undone and redone as if they were a single, atomic operation.
/// </summary>
/// <returns>A <see cref="IEditorTransaction"/> instance.</returns>
IEditorTransaction createEditorTransaction();
/// <exclude/>
[EditorBrowsable(EditorBrowsableState.Never)]
void debugDumpBlocks(TextWriter output);
यह सफलतापूर्वक एपीआई दस्तावेज, और इंटेलिसेंस से विधि को हटा देता है। हालांकि, एक नमूना अनुप्रयोग प्रोग्राम में अगर मैं मेटाडाटा में अपनी परिभाषा को देखने के लिए इंटरफ़ेस का एक उदाहरण पर राइट क्लिक करें, मैं अभी भी विधि देख सकते हैं, और [EditorBrowsable]
रूप में अच्छी तरह विशेषता, उदाहरण के लिए:
// Summary:
// Gets a ModelText.ModelDom.Nodes.IEditorTransaction instance, which helps
// to combine several DOM edits into a single transaction, which can be undone
// and redone as if they were a single, atomic operation.
//
// Returns:
// A ModelText.ModelDom.Nodes.IEditorTransaction instance.
IEditorTransaction createEditorTransaction();
//
[EditorBrowsable(EditorBrowsableState.Never)]
void debugDumpBlocks(TextWriter output);
सवाल:
- वहाँ एक रास्ता एक सार्वजनिक विधि को छिपाने के लिए है, मेटा डेटा से भी?
- यदि नहीं, तो इसके बजाय, इस परिदृश्य के लिए, क्या आप
internal
विधियों को बनाने औरInternalsVisibleTo
विशेषता का उपयोग करने की सलाह देंगे? या आप किसी अन्य तरीके की सिफारिश करेंगे, और यदि ऐसा है तो क्यों और क्यों?
धन्यवाद।
मैं एक उचित डिज़ाइन की अनुशंसा करता हूं जिसके लिए आपको सार्वजनिक रूप से उस कोड को बेनकाब करने की आवश्यकता नहीं है जिसे आप छुपाएंगे। –
मार्क के साथ सहमत हुए। आपको अपने सार्वजनिक इंटरफेस के माध्यम से "छुपा" सार्वजनिक तरीकों और/या आंतरिक बनाने के बिना अपने सभी कोड का परीक्षण करने में सक्षम होना चाहिए। –
@ मार्क मैं [सार्वजनिक इंटरफेस के माध्यम से कोड का परीक्षण कर रहा हूं] (http://stackoverflow.com/questions/856115), हालांकि रिग्रेशन-टेस्ट में मदद करने के लिए मेरे पास कुछ अतिरिक्त विधियां हैं, उदा। जो नियंत्रण की आंतरिक स्थिति को डंप करता है: ताकि परीक्षण केस विभिन्न (सार्वजनिक, दस्तावेज) इनपुट घटनाओं के बाद (अनियंत्रित) आंतरिक स्थिति पर जोर दे सके। – ChrisW