2010-04-15 14 views
6

मैं एक सेवा का परीक्षण कैसे करूं जो वेब सेवा संदर्भ द्वारा उत्पन्न प्रॉक्सी क्लाइंट का उपयोग करता है?राइनो मोक्स के साथ डब्ल्यूसीएफ वेब सेवाओं का नकल कैसे करें

मैं क्लाइंट का नकल करना चाहता हूं, लेकिन जेनरेट किए गए क्लाइंट इंटरफ़ेस में बंद विधि नहीं है, जो प्रॉक्सी को ठीक से समाप्त करने के लिए आवश्यक है। यदि मैं इंटरफ़ेस का उपयोग नहीं करता, लेकिन इसके बजाय एक ठोस संदर्भ, मुझे नज़दीकी विधि तक पहुंच प्राप्त होती है लेकिन प्रॉक्सी को नकल करने की क्षमता को खो देता है।

public class ServiceAdapter : IServiceAdapter, IDisposable 
{ 
    // ILoggingServiceClient is generated via a Web Service reference 
    private readonly ILoggingServiceClient _loggingServiceClient; 

    public ServiceAdapter() : this(new LoggingServiceClient()) {} 

    internal ServiceAdapter(ILoggingServiceClient loggingServiceClient) 
    { 
     _loggingServiceClient = loggingServiceClient; 
    } 


    public void LogSomething(string msg) 
    { 
     _loggingServiceClient.LogSomething(msg); 
    } 

    public void Dispose() 
    { 
     // this doesn't compile, because ILoggingServiceClient doesn't contain Close(), 
     // yet Close is required to properly terminate the WCF client 
     _loggingServiceClient.Close(); 
    } 
} 

उत्तर

1

मैं एक अंतरफलक है कि आपके ILoggingServiceClient से विरासत लेकिन बंद विधि कहते हैं बनाएंगे:

मैं एक वर्ग इस के समान परीक्षण करने के लिए कोशिश कर रहा हूँ। फिर एक रैपर क्लास बनाएं जो LoggingServiceClient उदाहरण को लपेटती है। कुछ ऐसा:

public interface IDisposableLoggingServiceClient : ILoggingServiceClient 
{ 
    void Close(); 
} 

public class LoggingServiceClientWrapper : IDisposableLoggingServiceClient 
{ 
    private readonly LoggingServiceClient client; 

    public LoggingServiceClientWrapper(LoggingServiceClient client) 
    { 
     this.client = client; 
    } 

    public void LogSomething(string msg) 
    { 
     client.LogSomething(msg); 
    } 

    public void Close() 
    { 
     client.Close(); 
    } 
} 

अब आपका सेवा एडाप्टर IDisposableLoggingServiceClient का उपयोग कर सकता है।

0

मेरे अनुभव में ऐसा कुछ परीक्षण करने के लिए आवश्यक समय वास्तव में इसके लायक नहीं है। उचित रूप से आपके एडाप्टर को पूरा करना चाहिए क्योंकि यह मुख्य उद्देश्य है कॉलिंग कोड के लिए एक परीक्षण सीम प्रदान करना है। उस बिंदु पर यह गुणों और विचारों की तरह है। आपको उनका परीक्षण करने की आवश्यकता नहीं है क्योंकि आप कोड का निरीक्षण कर सकते हैं और यह इतना आसान है कि आप जानते हैं कि यह सही है।

0

यह थोड़ा देर हो चुकी है, लेकिन मैं बस इसके आसपास के तरीकों को देख रहा था। क्योंकि स्वत: जनरेट ग्राहक वर्ग एक आंशिक रूप से उत्पन्न होता है तो आप इसे इस विस्तार कर सकते हैं:

public interface ICloseableLoggingServiceClient : ILoggingServiceClient 
{ 
    void Close(); 
} 

public partial class LoggingServiceClient : ICloseableLoggingServiceClient 
{ 

} 
अब

अपने LoggingServiceClientClientBase<> और जो कुछ भी अपने सेवा अनुबंध निर्दिष्ट करता है और आप उपहास करने के लिए सक्षम होना चाहिए से Close विधि एकजुट है RhinoMocks के साथ ICloseableLoggingServiceClient। आपको बस इतना करना है कि आप कंक्रीट क्लाइंट क्लास के बजाय नए इंटरफेस के खिलाफ इंजेक्शन और परीक्षण कर रहे हैं।

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