web-services - 如何使用 Rhino Mocks 模拟 WCF Web 服务

标签 web-services unit-testing rhino-mocks

如何测试使用由 Web 服务引用生成的代理客户端的类?

我想模拟客户端,但生成的客户端界面不包含 close 方法,这是正确终止代理所必需的。如果我不使用接口(interface),而是使用具体的引用,我可以访问 close 方法但失去模拟代理的能力。

我正在尝试测试与此类似的类:

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

最佳答案

我将创建另一个从 ILoggingServiceClient 继承但添加 Close 方法的接口(interface)。然后创建一个包装 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。

关于web-services - 如何使用 Rhino Mocks 模拟 WCF Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2645620/

相关文章:

asp.net - 对 Web 服务调用中的 session 的只读访问权限?

java - com.sun.xml.ws.client.ClientTransportException : HTTP transport error: java. lang.ClassCastException

unit-testing - Autotools:如何使用 make check 运行单个测试?

scala - 如何在 Spark Streaming Scala 中对 HBase 进行单元测试

c# - 对参数化 MSTest 使用自定义类型

web-services - 真实交易API

android - webservices和android的架构

.net - 犀牛模拟 : Is there any way to verify a constraint on an object property's property?

c# - 无法让 RhinoMocks 发出遵循泛型类型限制规则的模拟

c# - 为什么我在模拟测试对象上收到空引用异常?