आपकी समस्या यह है कि आपने अपनी डब्ल्यूसीएफ सेवा में अपने बिजनेस लेयर को कसकर जोड़ दिया है - आप वास्तव में बिजनेस लेयर के भीतर सेवा क्लाइंट का एक नया उदाहरण बनाते हैं, जिसका अर्थ है कि बिना कॉल किए भेजें SendData विधि को कॉल करना असंभव है सेवा विधियों।
यहां सबसे अच्छा समाधान आपके आर्किटेक्चर पर निर्भरता इंजेक्शन पेश करना है।
अपने सबसे सरल पर, आप जो भी करते हैं वह आपके बिजनेस लेयर में आपकी सेवा कक्षा का एक उदाहरण है। यह अक्सर एक रचनाकार पैरामीटर का उपयोग कर कक्षा निर्माण समय पर किया जाता है।
public class BusinessClass
{
private ISomeServiceClient _svc;
public BusinessClass(ISomeServiceClient svc)
{
_svc = svc;
}
public void SendData(DataUnit dataUnit)
{
_svc.SomeMethod(dataUnit);
}
}
ध्यान दें कि कोड से ऊपर, एक डिजाइन पैटर्न है नियंत्रण कंटेनर के किसी उलट जैसे किसी भी ढांचे पर बिल्कुल कोई निर्भरता के साथ।
यदि आपकी कंपनी की नीति ऐसी ढांचे (रास्ते में पागल नीति) का उपयोग न करने के लिए है, तो भी आप अपने यूनिट परीक्षणों के अंदर सेवा के अपने नकली उदाहरण मैन्युअल रूप से इंजेक्ट कर सकते हैं।
स्रोत
2011-05-26 14:52:57
क्या मैं इन मामलों करना Moq उपयोग करने के लिए करने के लिए सेवा इंटरफ़ेस उपहास करने के लिए:, सेवा कॉल कर एक TestThing में पारित अगर आप सिर्फ एक परीक्षण चलाना चाहते हैं करना चाहते हैं। – Yaur
यहां डब्ल्यूसीएफ के बारे में कुछ खास नहीं है (हालांकि तथ्य यह है कि क्लाइंट क्लास एक इंटरफ़ेस लागू करता है) आपकी मदद कर सकता है। कुछ वर्ग लाइब्रेरी विधि को कॉल करने के लिए 'SendData' की आवश्यकता होने पर यह वही समस्या होगी। –
@ यकुर: मैं न्यूट फ्रेमवर्क कैसे कहूं कि अगर कुछ सेवा क्लाइंट कहा जाता है, तो इस मॉक ऑब्जेक्ट का उपयोग करें। चूंकि कुछ सर्विस क्लाइंट बीएल के अंदर बनाया गया है, इसलिए मुझे नहीं पता कि मैं इसे कैसे पास करूं। – Asdfg