अगर मैं आपके सवाल का सही ढंग से समझ, आप एक वर्ग एक कुछ अन्य विधानसभा में परिभाषित किया गया है, और फिर एक वर्ग बी और अधिक या कम इस तरह लागू किया:
public class B : A
{
public override MyMethod(object input)
{
// Do something
base.MyMethod(input);
}
}
और अब आप उस आधार सत्यापित करना चाहते हैं। MyMethod कहा जाता है?
मुझे नहीं लगता कि आप गतिशील नकली पुस्तकालय के साथ ऐसा कैसे कर सकते हैं। सभी गतिशील नकली पुस्तकालय (टाइपमॉक के निष्पादन के साथ) प्रश्न में टाइप किए गए वर्गों को गतिशील रूप से उत्सर्जित करके काम करते हैं।
आपके मामले में, तुम नहीं बहुत अच्छी तरह से Moq एक से प्राप्त करने, पूछने के बाद से आप बी परीक्षण करना चाहते हैं कर सकते हैं।
इसका मतलब है कि आपको Mock<B>
देने के लिए आपको मक से पूछना चाहिए। हालांकि, इसका मतलब है कि उत्सर्जित प्रकार बी से निकला है, और जब यह MyMethod (जो अभी भी वर्चुअल है) को ओवरराइड कर सकता है और इसके आधार (बीएमएम विधि) को कॉल कर सकता है, तो उसके पास मूल वर्ग तक पहुंचने का कोई तरीका नहीं है और यह सत्यापित करें कि बी base.MyMethod
पर कॉल करें । के संभावित अपवाद के साथ
public class C : B
{
public override MyMethod(object input)
{
// How to verify that base calls its base?
// base in this context means B, not A
}
}
फिर:
कल्पना कीजिए कि आप एक वर्ग (सी) कि बी से निकला है आप MyMethod ओवरराइड कर सकते हैं जबकि लिखने के लिए है, वहाँ कोई रास्ता नहीं है आपको लगता है कि बी ए कॉल की पुष्टि कर सकते है TypeMock, गतिशील नकली पुस्तकालय कुछ भी नहीं कर सकते हैं जो आप मैन्युअल रूप से नहीं कर सकते हैं।
हालांकि, मुझे लगता है कि आप जिस मूल विधि को सत्यापित करने की कोशिश कर रहे हैं उसे कॉल करना कुछ अवलोकन दुष्प्रभाव है, इसलिए यदि संभव हो, तो क्या आप विधि-आधारित परीक्षण के बजाय राज्य-आधारित परीक्षण का उपयोग कर सकते हैं ताकि विधि को कॉल करने के परिणाम को सत्यापित किया जा सके। ?
किसी भी मामले में, राज्य-आधारित परीक्षण अधिकांश मामलों में आपका डिफ़ॉल्ट दृष्टिकोण होना चाहिए।
कंपाइलर त्रुटि: कीवर्ड 'यह' वर्तमान संदर्भ में उपलब्ध नहीं है। व्युत्पन्न वर्ग क्षेत्र में। –