हम परीक्षण प्रयोजनों के लिए OperationContext
कक्षा का नकल करना चाहते हैं। हम 'मॉक' का उपयोग कर रहे हैं। लेकिन OperationContext
एक सीलबंद वर्ग है और इसे मजाक नहीं किया जा सकता है। इसलिए हम एक डमी OperationContext
ऑब्जेक्ट बनाने की कोशिश कर रहे हैं। लेकिन OperationContext
कन्स्ट्रक्टर पैरामीटर के रूप में IContextChannel
लेता है। हम IContextChannel
को पकड़ने के तरीके के बारे में जानना चाहते हैं ताकि इसे OperationContext
कन्स्ट्रक्टर में पास किया जा सके।डब्ल्यूसीएफ डाटा सर्विसेज: मॉकिंग ऑपरेशन कॉन्टेक्स्ट
उत्तर
NetFX project में इस तरह की चीज को अनुमति देने के लिए कई रैपर वर्ग और इंटरफेस शामिल हैं।
सामान्य सिफारिश implement wcf services without referencing wcf है।
उदाहरण इसे कैसे करना http://marcin.floryan.pl/blog/2012/01/do-we-really-need-wcfmock
में हम operationResponse के लिए एक संदर्भ के साथ OperationContext के लिए एक संदर्भ प्रतिस्थापित कर रहे हैं। ऑपरेशन रेस्पॉन्स को इंटरफ़ेस के रूप में परिभाषित किया जाना चाहिए और रिपोजिटरी जैसे उदाहरण में दिए गए कन्स्ट्रक्टर में इंजेक्शन दिया जा सकता है। हमारी टेस्ट विधि अब थोड़ा छोटा और अधिक पठनीय हो जाती है।
और http://blogs.msdn.com/b/ploeh/archive/2006/12/04/integrationtestingwcfservices.aspx
आइए में, एक पल के लिए, प्राधिकरण निष्पादित करने की जरूरत पर विचार करें। आप अपने प्रत्येक ऑपरेशन कार्यान्वयन में सीधे ऑपरेशन कॉन्टेक्स्ट.क्यूरेंट का निरीक्षण कर सकते हैं, लेकिन यह मिश्रण चिंताओं (व्यापार प्रमाणीकरण के साथ मिश्रित ऑपरेशन में कार्यान्वित तर्क) होगा। सही तरीका सेवा प्राधिकरण प्रबंधक से प्राप्त कक्षा प्रदान करना होगा, और प्राधिकरण के लिए इस कक्षा का उपयोग करने के लिए सेवा को कॉन्फ़िगर करना होगा। यह आपको यूनिट परीक्षण आपके ऑपरेशन कार्यान्वयन को रखने की अनुमति देगा, लेकिन जाहिर है, आपको प्राधिकरण प्रबंधक का परीक्षण करने की भी आवश्यकता है, और यह पता चला है कि एकीकरण परीक्षण इस कार्य को पूरा करने का सबसे आसान तरीका है।
आप अभी भी से http://blogs.msdn.com/b/ploeh/archive/2008/06/28/unit-testing-duplex-wcf-services.aspx
एक सिफारिश का पालन नकली की जरूरत है आपको बस इतना करना है कुछ सार के साथ कॉल toOperationContext.GetCallbackChannel को बदलने के लिए है। .NET 3.5 पर, सबसे आसान अमूर्त Func है, जिसमें हस्ताक्षर है, लेकिन यदि आप .NET 3.0 पर हैं, तो आप हमेशा एक समान प्रतिनिधि प्रकार को स्वयं परिभाषित कर सकते हैं।
वैकल्पिक रूप से एक अंतिम सहारा के रूप में आप WCFmock
#if DEBUG
using WebOperationContext = System.ServiceModel.Web.MockedWebOperationContext;
#endif
यह, उदाहरण के लिए उपयोगी है आप विकास में मज़ाक उड़ाया संस्करण का उपयोग करना चाहते हैं, और हमेशा उत्पादन में WCF संस्करण का उपयोग कर सकते हैं।बस इतना ही, यदि आपको अपना मौजूदा सेवा कार्यान्वयन को छूने के लिए, एक बार आपको लगता है कि उर्फ परिभाषित जरूरत नहीं है, सेवा
परीक्षण किया जाना http://blog.gfader.com/2010/08/how-to-unit-test-wcf-service.html
सभी OperationContext करने के लिए अपने कॉल से तैयार है .Current.Channel.SessionId को MockedOperationContext द्वारा अवरुद्ध किया गया है, लेकिन केवल आपके परीक्षणों में आप ऑपरेशन कॉन्टेक्स्ट का मज़ाक उड़ा रहे हैं। आपके सामान्य वातावरण में मॉकऑपरेशन कॉन्टेक्स्ट वास्तविक ऑपरेशन कॉन्टेक्स्ट के प्रॉक्सी के रूप में कार्य करता है।
क्या आप रैपर कक्षाओं के नाम प्रदान कर सकते हैं? मैं लिंक पर दस्तावेज़ीकरण नहीं देख सका। –