के साथ एक ठोस वर्ग मजाक कैसे अंतरफलक तर्क के साथ निर्माता कॉल करनी होगी निम्नलिखित वर्ग है, जो निर्माता इंजेक्शन का उपयोग करता है:मैं जब Moq
public class Service : IService
{
public Service(IRepository repository, IProvider provider) { ... }
}
इस वर्ग में सबसे विधियों के लिए, मैं बस Moq बनाने IRepository
के लिए मजाक उड़ाता है और IProvider
और Service
का निर्माण। हालांकि, कक्षा में एक विधि है जो एक ही कक्षा में कई अन्य विधियों को बुलाती है। इस विधि का परीक्षण करने के लिए, उन सभी विधियों को एकसाथ परीक्षण करने के बजाय, मैं यह जांचना चाहता हूं कि विधि उन विधियों को सही तरीके से कॉल करे और उनके वापसी मूल्यों को सही ढंग से संसाधित करे।
ऐसा करने का सबसे अच्छा तरीका Service
नकल करना है। मैंने बिना किसी मुद्दे के पहले मक के साथ ठोस वर्गों का मज़ाक उड़ाया है। मैंने कंक्रीट कक्षाओं का भी मज़ाक उड़ाया है जिसके लिए बिना किसी मुद्दे के मोक के साथ कन्स्ट्रक्टर तर्क की आवश्यकता है। हालांकि, यह पहली बार है जब मुझे को मैक किए गए ऑब्जेक्ट के लिए कन्स्ट्रक्टर में तर्कों को पारित करने की आवश्यकता है। स्वाभाविक रूप से, मैंने इसे इस तरह से करने की कोशिश की:
var repository = new Mock<IRepository>();
var provider = new Mock<IProvider>();
var service = new Mock<Service>(repository.Object, provider.Object);
हालांकि, यह काम नहीं करता है। इसके बजाय, मैं निम्नलिखित त्रुटि मिलती है:
Castle.DynamicProxy.InvalidProxyConstructorArgumentsException : Can not instantiate proxy of class: My.Namespace.Service.
Could not find a constructor that would match given arguments:
Castle.Proxies.IRepository
Castle.Proxies.IProvider
यह ठीक काम करता है अगर Service
के निर्माता int
और string
रों की तरह साधारण तर्क लेता है, लेकिन नहीं करता है, तो यह इंटरफेस है कि मैं मजाक कर रहा हूँ लगता है। आप यह कैसे करते हैं?
आप किस मक और महल संस्करण का उपयोग कर रहे हैं? चूंकि आपका नमूना कोड Moq 4.2.1312.1622 और Castle.Core 3.2.2 का उपयोग कर ठीक काम कर रहा है ... – nemesv