2012-11-26 10 views
8

तो, मुद्दा यह है कि मेरे पास मेरी असेंबली में आंतरिक कक्षाओं का एक समूह है जिसका उपयोग कक्षा के द्वारा किया जाता है जिसे मैं परीक्षण करना चाहता हूं। चूंकि एक्सेसर्स को वीएस2012 से हटा दिया गया है, इसलिए मैं [InternalsVisibleTo] का उपयोग करने के साथ ठीक हूं और यह बहुत अच्छा काम करता है ... जब मैं अपनी आंतरिक कक्षाओं को कम करने की कोशिश करता हूं, तो वे नकली ढांचे के लिए दृश्यमान नहीं होते हैं। मुझे यह भी ध्यान रखना चाहिए कि मैं जिस विशेष वर्ग से निपट रहा हूं वह स्थैतिक वर्ग है, और मैं वास्तव में इंटरफेस (और स्टब्स का उपयोग करने के लिए) का उपयोग करने के लिए सबकुछ पुन: सक्रिय नहीं करना चाहता क्योंकि संगठन में प्रतिरोध के स्तर पर प्रतिरोध के कारण।नकली फ्रेमवर्क शिम्स के साथ वीएस 2012 में आंतरिक कक्षाओं को नकल/अलग कैसे करें?

क्या इन आंतरिक सदस्यों को दृश्य स्टूडियो 2012 में शिम्स संदर्भ द्वारा उपयोग करने योग्य तरीके से इंटरफेसिंग (शाब्दिक) सब कुछ का उपयोग किए बिना उपयोग करने का कोई तरीका है?

उत्तर

20

निम्नलिखित पृष्ठ बताता है कि जेनरेट किए गए नकली असेंबली में आंतरिक प्रकार कैसे दिखते हैं। http://msdn.microsoft.com/en-us/library/hh708916.aspx#bkmk_internal_types

का कहना है कौन सा:

नकली कोड जनरेटर प्रकार है कि उत्पन्न नकली विधानसभा के लिए दिखाई दे रहे हैं के लिए शिम प्रकार और ठूंठ प्रकार उत्पन्न होगा। नकली और आपकी टेस्ट असेंबली के लिए दिखाई देने वाली एक शर्मिड असेंबली के आंतरिक प्रकार बनाने के लिए, श्मिटेड असेंबली कोड में आंतरिक VISibleToAttribute विशेषताओं को जोड़ें जो उत्पन्न नकली असेंबली और परीक्षण असेंबली को दृश्यता देता है।

[assembly: InternalsVisibleTo("FileSystem.Fakes")] 
[assembly: InternalsVisibleTo("FileSystem.Tests")] 

तुम भी लक्ष्य विधानसभा से आंतरिक प्रकार के अपने परीक्षण विधानसभा उपयोग की अनुमति के लिए एक InternalsVisibleToAttribute की जरूरत है। दूसरे शब्दों में, आप की जरूरत:

[assembly: InternalsVisibleTo("TargetAssembly.Fakes")] 
[assembly: InternalsVisibleTo("TestAssembly")] 
+0

यह वास्तव में कहना है कि होता है, और अभी तक जब मैं इस की कोशिश की है, अपने आंतरिक इंटरफेस में से कोई भी दिखाई देते हैं। मुझे केवल सार्वजनिक इंटरफेस के लिए स्टब्स मिलते हैं। मुझे पता है कि मूल प्रश्न शिम्स के बारे में था - क्या आप इसे आंतरिक इंटरफेस को रोकने के लिए काम करने में सक्षम हैं? –

+2

हम एमएसडीएन पेज को अपडेट करने की प्रक्रिया में हैं। आपको अपनी असेंबली को लक्षित असेंबली से आंतरिक प्रकारों तक पहुंचने की अनुमति देने के लिए एक InternalsVisibleToAttribute की भी आवश्यकता है। दूसरे शब्दों में, आपको इसकी आवश्यकता है: [असेंबली: आंतरिक दृश्यमान ("targetAssembly.Fakes")] [असेंबली: आंतरिक दृश्यमान ("TestAssembly")] –

+4

उस एमएसडीएन पेज से महत्वपूर्ण नोट जो मैंने याद किया: 'नकली ढांचे का उपयोग समान होता है सभी उत्पन्न assemblies' हस्ताक्षर करने के लिए कुंजी है, इसलिए सार्वजनिक कुंजी यदि हस्ताक्षर करने के लिए हमेशा होना चाहिए 'PublicKey = 0024000004800000940000000602000000240000525341310004000001000100e92decb949446f688ab9f6973436c535bf50acd1fd580495aae3f875aa4e4f663ca77908c63b7f0996977cb98fcfdb35e05aa2c842002703cad835473caac5ef14107e3a7fae01120a96558785f48319f66daabc862872b2c53f5ac11fa335c0165e202b4c011334c7bc8f4c4e570cf255190f4e3e2cbc9137ca57cb687947bc' आप सामान प्रवेश कर रहे हैं, तो! यह मुझे पकड़ने के लिए हमेशा के लिए ले लिया! –

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