2010-04-15 25 views
6

Làm cách nào để kiểm tra một lớp sử dụng các máy khách proxy được tạo bởi Tham chiếu Dịch vụ Web?Làm thế nào để thử các Dịch vụ Web của WCF với Rhino Mocks

Tôi muốn giả lập ứng dụng khách, nhưng giao diện khách hàng được tạo không chứa phương thức đóng, được yêu cầu để chấm dứt đúng proxy. Nếu tôi không sử dụng giao diện, nhưng thay vào đó là một tham chiếu cụ thể, tôi có quyền truy cập vào phương thức đóng nhưng mất khả năng giả mạo proxy.

Tôi đang cố gắng để thử nghiệm một lớp học tương tự như sau:

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

Trả lời

1

Tôi muốn tạo ra một giao diện được thừa kế từ ILoggingServiceClient của bạn nhưng thêm vào các phương thức Close. Sau đó tạo một lớp bao bọc để kết thúc trường hợp LoggingServiceClient. Một cái gì đó như:

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

Bây giờ bộ điều hợp dịch vụ của bạn có thể sử dụng IDisposableLoggingServiceClient.

0

Theo kinh nghiệm của tôi, thời gian cần thiết để kiểm tra một cái gì đó như thế này không thực sự đáng giá. Thực hiện đúng bộ điều hợp của bạn nên chủ yếu chỉ là làm một đi qua vì mục đích chính của nó là cung cấp một đường may thử nghiệm để gọi mã. Vào thời điểm đó nó giống như thuộc tính và quan điểm. Bạn không cần phải kiểm tra chúng bởi vì bạn có thể kiểm tra trực quan mã và nó rất đơn giản bạn biết nó đúng.

0

Điều này hơi trễ một chút, nhưng tôi chỉ xem xét những cách xung quanh vấn đề này. Bởi vì các lớp khách hàng tự động tạo ra được tạo ra như một phần bạn có thể mở rộng nó như thế này:

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

public partial class LoggingServiceClient : ICloseableLoggingServiceClient 
{ 

} 

tại LoggingServiceClient của bạn đã kết hợp các phương pháp Close từ ClientBase<> và bất cứ hợp đồng dịch vụ mà bạn chỉ định và bạn sẽ có thể để chế nhạo số ICloseableLoggingServiceClient với RhinoMocks. Tất cả những gì bạn cần làm là đảm bảo rằng bạn đang tiêm và thử nghiệm với giao diện mới thay vì lớp khách hàng cụ thể.

Các vấn đề liên quan