Moq

2012-07-09 12 views
11

में वर्चुअल सदस्यों का मज़ाक उड़ाते हुए यूनिट परीक्षण के लिए, मैं NUnit 2.6 और Moq 4.0 का उपयोग कर रहा हूं। आभासी सदस्यों से संबंधित एक विशेष मामला है जहां मोक की प्रॉक्सी ऑब्जेक्ट्स वास्तविक कार्यान्वयन (शायद डिज़ाइन द्वारा) विधि विधि को रिले नहीं करती हैं। उदाहरण के लिए, अगर मैं एक वर्ग ...Moq

public class MyClass { 
    protected virtual void A() { 
     /* ... */ 
    } 

    protected virtual void B(...) { 
     /* ... */ 
    } 
} 

था ... और मैं Moq का उपयोग अपने परीक्षण स्थिरता में GetSomethingElse के A() विधि ओवरराइड करने के लिए ...

var mock = new Mock<MyClass>(); 
mock.Protected().Setup("A").Callback(SomeSortOfCallback); 

... का उपयोग कर नकली A विधि शानदार काम करता है; हालांकि, अगर कहा गया विधि में कुछ भी मॉक-अप विधि B पर कॉल नहीं करेगा, तो विधि कुछ भी नहीं करेगी और/या डिफ़ॉल्ट मान वापस कर देगी, भले ही वास्तविक कार्यान्वयन MyClass में मौजूद हो।

क्या इस के आसपास काम करने का कोई तरीका है? क्या मैं मोक गलत इस्तेमाल कर रहा हूँ?

अग्रिम धन्यवाद,
मैनी

उत्तर

17

सेट mock.CallBase = true और तुम जाना अच्छा होना चाहिए।

+0

क्या होगा यदि आप अभी भी अन्य तरीकों का नकल करना चाहते हैं? –

+1

@LouisRhys बहुत यकीन है कि इससे इसमें हस्तक्षेप नहीं होता है - अगर आप स्पष्ट रूप से कुछ कॉल करते हैं तो 'कॉलबेस' सेटिंग कभी भी खेल में नहीं आती है। –

-1
var systemUnderTest = new Moq.Mock<ProcessBulkData> { CallBase = true }; 
systemUnderTest.Setup(s => s.MethodName(...)).Returns(...); 
var actual=systemUnderTest.Object.BulkInsert(...); 
+3

आपके उत्तर के साथ कोड के कुछ स्पष्टीकरण को शामिल करना बेहतर है। – EJoshuaS

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