如何测试使用由 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/