2010-04-15 21 views
6

Web Service Reference tarafından oluşturulan proxy istemcileri kullanan bir sınıfı nasıl sınıyorum?WCF Web Hizmetlerini Rhino Mocks ile alay etme

İstemciyle dalga geçmek istiyorum ancak oluşturulan istemci arabirimi, proxy'yi düzgün bir şekilde sonlandırmak için gereken yakın yöntemi içermiyor. Arabirimi kullanmazsam, bunun yerine somut bir referans olursa, yakın yönteme erişebilirim, ancak proxy ile uğraşma yeteneğini kaybederim. Ben senin ILoggingServiceClient devralır ancak kapatma yöntemini ekleyen başka arayüz oluşturmak istiyorum

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(); 
    } 
} 

cevap

1

:

Ben buna benzer bir sınıf test etmek çalışıyorum. Sonra LoggingServiceClient örneğini saran bir sarmalayıcı sınıfı oluşturun. Şunlar gibi:

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(); 
    } 
} 

Artık servis adaptörünüz IDisposableLoggingServiceClient'i kullanabilir.

0

Deneyimlerime göre böyle bir şeyi test etmek için gereken zaman buna değmez. Bağdaştırıcınızın düzgün bir şekilde yapılması, temel amacı arama kodu için bir test dikişi sağlamak olduğundan, çoğunlukla bir geçiş yapmalıdır. O noktada bu özellik ve manzaraya benziyor. Bunları test etmeniz gerekmez, çünkü kodu görsel olarak inceleyebilir ve doğru olduğunu bildiğiniz kadar basittir.

0

Bu biraz geç oldu, ama sadece bu konuyla ilgili yollara bakıyordum. Otomatik oluşturulan istemci sınıfı kısmi olarak üretilir Çünkü böyle uzatabilirsiniz: şimdi

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

public partial class LoggingServiceClient : ICloseableLoggingServiceClient 
{ 

} 

LoggingServiceClientClientBase<> ve ne olursa olsun hizmet sözleşmesi belirtir ve alay etmek gerekir dan Close yöntemi birleştirdi senin RhinoMocks ile ICloseableLoggingServiceClient. Tek yapmanız gereken, somut istemci sınıfı yerine yeni arayüze karşı enjekte edip test ettiğinizden emin olmaktır.

İlgili konular