आप किसी भी इंटरफेस, और किसी भी सार या आभासी सदस्यों का नकल कर सकते हैं। यह मूल रूप से यह है। आप भी कर सकते हैं,
var imock = new Mock<IMyClass>();
var aMock = new Mock<SomeAbstractClass>();
सदस्यों SomeAbstractClass से विरासत में मिली सील नहीं कर रहे हैं नकली MyClass:
इसका मतलब है कि निम्नलिखित बिल्कुल संभव हो रहे हैं
var mcMock = new Mock<MyClass>();
इस अर्थ या नहीं बनाता है या नहीं MyClass के कार्यान्वयन पर निर्भर करता है। मान लीजिए कि SomeAbstractClass इस तरह परिभाषित किया गया है दो:
public abstract class SomeAbstractClass
{
public abstract string GetStuff();
}
MyClass में GetStuff विधि इस तरह कार्यान्वित किया जाता है, तो आप अभी भी यह ओवरराइड कर सकते हैं:
:
public override string GetStuff()
{
return "Foo";
}
यह आपको लिखने के लिए अनुमति होगी
mcMock.Setup(x => x.GetStuff()).Returns("Bar");
जब तक स्पष्ट रूप से मुहरबंद नहीं किया जाता है, GetStuff अभी भी वर्चुअल है। हालांकि, आपने इस तरह गेटस्टफ लिखा था:
public override sealed string GetStuff()
{
return "Baz";
}
आप इसे नकल करने में सक्षम नहीं होंगे। उस स्थिति में, आपको मोक से अपवाद मिलेगा कि यह एक गैर-वर्चुअल सदस्य का अमान्य ओवरराइड है (क्योंकि अब यह sealed
है)।
स्रोत
2009-12-29 07:52:38
मुझे लगता है कि उनके प्रश्न को यह समझ में आया कि वह पूछताछ कर रहा था * समकक्ष * MyClass ऑब्जेक्ट को अपने प्रश्न –
नहीं, क्योंकि उस मामले में सही सवाल होना चाहिए था: क्या मैं किसी भी ठोस वर्ग का नकल करने के लिए मोक का उपयोग कर सकता हूं ? जवाब बस नहीं रहा होगा। जहां तक मुझे पता है कि राइनो मोक्स हालांकि ऐसा कर सकते हैं। –