2011-10-26 10 views
6

में निर्मित मैं SearchResultCollection क्लास को नकल करने की कोशिश कर रहा हूं। हालांकि, जब मैं PropertiesLoaded गेटर के लिए एक कॉल अवरोधन करने का प्रयास करें, अपने परीक्षण एक अपवाद फेंकता है:एमओसी सी # कक्षा

System.NotSupportedException: Invalid setup on a non-virtual (overridable in VB) member: x => x.PropertiesLoaded 

मेरे कोड:

Mock<SearchResultCollection> searchResultMock = new Mock<SearchResultCollection>(); 

// Set up collection that will be returned 
string[] tempData = { "one", "two" }; 
searchResultMock.SetupGet(x => x.PropertiesLoaded).Returns(tempData); 

किसी को सफलतापूर्वक बाहर एक वर्ग इस तरह मज़ाक उड़ाया गया है? प्रश्न में संपत्ति केवल एक गेटर है और आभासी नहीं है।

// 
    // Summary: 
    //  Gets the System.DirectoryServices.DirectorySearcher properties that were 
    //  specified before the search was executed. 
    // 
    // Returns: 
    //  An array of type System.String that contains the properties that were specified 
    //  in the System.DirectoryServices.DirectorySearcher.PropertiesToLoad property 
    //  collection before the search was executed. 
    public string[] PropertiesLoaded { get; } 
+0

संभव डुप्लिकेट ([? मैं Moq साथ MouseButtonEventArgs.GetPosition() नकली क्यों नहीं कर पा] http://stackoverflow.com/questions/1 9 18208/क्यों-कैंट-आई-मॉक-माउसबूटोनवेन्टर्ग-गेटपोशन-साथ-moq) – TrueWill

उत्तर

8

मुझे डर है कि आप नहीं कर सकते हैं।

जैसा कि आपने कहा था कि संपत्ति वर्चुअल नहीं है। एक और विकल्प इंटरफ़ेस का मज़ाक उड़ाया गया था लेकिन मैंने जांच की और इस वर्ग के लिए कोई नहीं है (एमएसडीएन दस्तावेज़ के अनुसार)।

कुछ अन्य अलगाव ढांचे हैं जो हालांकि ऐसा कर सकते हैं। माइक्रोसॉफ्ट मोल्स इसे करने में सक्षम है, तो TypeMock है।


माइक्रोसॉफ्ट मोल्स: http://research.microsoft.com/en-us/projects/moles/

TypeMock: http://www.typemock.com/

की
+0

हाँ, इनमें से किसी भी अलगाव ढांचे के लिए काम करेंगे। – scottheckel

2

यह मोक के साथ संभव नहीं है। आप वर्चुअल विधियों के साथ इंटरफेस, अमूर्त कक्षाएं और कक्षाओं का नकल कर सकते हैं (और बाद के मामले में, आप वर्चुअल विधियों के व्यवहार को नकल करने के लिए केवल सेटअप() का उपयोग कर सकते हैं)।

+0

इस मामले में, मुझे उन कार्यों को कॉल को अवरुद्ध करने के लिए प्रॉक्सी फ़ंक्शंस/ऑब्जेक्ट्स लिखने के लिए मजबूर होना पड़ता है जिन्हें मैं कॉल करना चाहता हूं। ओह। – MarkP

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