模拟 WCF 客户端代理的最佳方法

2024-05-18

有没有办法使用 Rhino 模拟框架来模拟 WCF 客户端代理,以便我可以访问 Channel 属性?我正在尝试对 Proxy.Close() 方法进行单元测试,但由于代理是使用抽象基类构造的ClientBase<T>其中有ICommunicationObject接口,我的单元测试失败,因为模拟对象中不存在类的内部基础结构。任何使用代码示例的好方法将不胜感激。


您可以做的是创建一个继承原始服务接口的接口,并ICommunicationObject。然后,您可以绑定并模拟该接口,并且仍然拥有所有重要的方法。

例如:

public interface IMyProxy : IMyService, ICommunicationObject
{
   // Note that IMyProxy doesn't implement IDisposable. This is because
   // you should almost never actually put a proxy in a using block, 
   // since there are many cases where the proxy can throw in the Dispose() 
   // method, which could swallow exceptions if Dispose() is called in the 
   // context of an exception bubbling up. 
   // This is a general "bug" in WCF that drives me crazy sometimes.
}

public class MyProxy : ClientBase<IMyService>, IMyProxy
{
   // proxy code 

}

public class MyProxyFactory
{
   public virtual IMyProxy CreateProxy()
   {
      // build a proxy, return it cast as an IMyProxy.
      // I'm ignoring all of ClientBase's constructors here
      // to demonstrate how you should return the proxy 
      // after it's created. Your code here will vary according 
      // to your software structure and needs.

      // also note that CreateProxy() is virtual. This is so that 
      // MyProxyFactory can be mocked and the mock can override 
      // CreateProxy. Alternatively, extract an IMyProxyFactory
      // interface and mock that. 
      return new MyProxy(); 
   } 
} 

public class MyClass
{
   public MyProxyFactory ProxyFactory {get;set;}
   public void CallProxy()
   {
       IMyProxy proxy = ProxyFactory.CreateProxy();
       proxy.MyServiceCall();
       proxy.Close();
   }
}


// in your tests; been a while since I used Rhino  
// (I use moq now) but IIRC...:
var mocks = new MockRepository();
var proxyMock = mocks.DynamicMock<IMyProxy>();
var factoryMock = mocks.DynamicMock<MyProxyFactory>();
Expect.Call(factoryMock.CreateProxy).Return(proxyMock.Instance);
Expect.Call(proxyMock.MyServiceCall());
mocks.ReplayAll();

var testClass = new MyClass();
testClass.ProxyFactory = factoryMock.Instance;
testClass.CallProxy();

mocks.VerifyAll();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

模拟 WCF 客户端代理的最佳方法 的相关文章

  • SingleOrDefault异常处理

    我有一个示例代码 它调用 SingleOrDefault 方法 3 次 并在任何序列具有多个匹配元素时记录异常 如果我想检查这段代码的哪一部分抛出异常 问题就开始了 是否可以从此异常中获取一些有用的信息 例如谓词参数或集合类型以进行更详细的
  • 使用 TCP 时是否需要使用校验和来保护我的消息?

    使用 TCP 作为网络协议 在通过线路发送消息之前 我会为每条消息的大小 以及可能的校验和 添加前缀 我想知道 计算和传输消息的校验和是否有意义 以确保消息将被不变地传递 如果以及何时传递 例如因为一些网络错误 目前 我在发送消息本身之前发
  • 远程服务器返回错误:NotFound。银光+WCF

    我正在尝试调用网络服务几个小时 我添加了 clientaccesspolicy xml
  • 与简单的文件请求相比,您预计 Web 服务请求的响应时间开销是多少?

    我正在开发一个 asp net Web 服务应用程序 以向使用 jQuery ajax 发出请求的小部件提供 json 格式的数据 我一直在使用 FireBug Net 视图来检查数据请求需要多长时间 在我最初的原型中 我只是请求静态 js
  • WCF获取证书编码值

    我在 WCF 服务中使用证书 因此在 web Config 中有一个编码值
  • .net 中的计时器合并

    Windows 7 引入了计时器合并 提高了能源效率 哪些托管 API 公开了计时器容差 似乎利用此功能的唯一方法是 p invoke设置等待定时器 http msdn microsoft com en us library windows
  • 线程、进程和 Application.Exit()

    我的应用程序由主消息循环 GUI 和线程 Task Factory 组成 在线程中我调用一些第三方应用程序var p new Process 但是当我调用Application Exit 在消息循环中 我可以看到在线程中启动的进程仍在内存中
  • 将 C# 中的 asmx web 服务的 Soap 请求标头从 text/xml 更改为soap/xml

    我需要调用网络服务 我生成了一个代理并调用了该方法 但它一直失败 因为 API 期望标头中包含soap xml 而 Visual Studio 中生成的代理客户端则在标头中发送文本 xml 问题 是否可以更改生成的代理客户端的 Conten
  • 在 SpecFlow 测试中使用 ChromeDriver

    因此 正如我们所知 当您使用 SpecFlow 时 如果您重复使用另一个测试中的步骤 它会自动将其拉入并重复使用 但是 我遇到了一个问题 测试 A 登录我 测试 B 登录并确认主页是正确 但当我开始使用测试 B 时 测试 A 正在初始化 C
  • “反序列化操作回复消息正文时出错...” - 对于我调用的每个方法

    我正在尝试为我们的波兰拍卖服务 Allegro 创建非常简单的客户端应用程序 他们提供 SOAP 架构中的 API 问题是 每次我尝试调用任何方法时 我都会收到 反序列化操作 方法名称 的回复消息正文时出错 一般来说 我对网络服务不熟悉 所
  • 是否需要连续编号?

    我正在开发一个 winform NET 应用程序 其中包括订单 发票 服务订单 票务等 这些实体在对其 ID 进行编号时是否必须按顺序排列 国际海事组织没有 以一个订单为例 它只有通过业务层才有效 在此过程中 可能已经创建了另一个订单 批准
  • 为什么这个跨域ajax调用实际上有效?

    我无意中写了一个跨域AJAX调用NextBus http www nextbus com xmlFeedDocs NextBusXMLFeed pdf 使用 jQuery ajax url http webservices nextbus
  • 将 null 投射到某物中?

    今天我和一位同事进行了一次有趣的讨论 我们正在讨论两段 C 代码 代码片段 1 if reader IsDBNull 2 long variable1 reader GetInt64 2 代码片段2 long variable1 reade
  • 公共交通错误队列正在消耗,但仍然不为空

    我正在使用 Mastransit 3 5 0 和 RabbitMq 如果队列消费者抛出异常 则默认由 MoveExceptionToTransportFilter 处理异常并移至 error 队列 对于 error 队列 我有单独的消费者
  • 什么是 System.ContextBoundObject?

    What is 上下文绑定对象 http msdn microsoft com en us library system contextboundobject aspx用于 该文档提到了 上下文 它似乎是以编程方式定义的 但未能给出任何解释
  • 使用 JAX-WS 的 WebLogic 中没有模式导入的单个 WSDL

    如何使用 JAX WS 配置由 WebLogic 10 3 6 生成的 Web 服务 以将对象架构包含在单个 WSDL 文件声明 而不是导入声明 中 示例代码 界面 import javax ejb Local Local public i
  • 计算文本框中换行的行数

    我在文本框中有一行文本 并且换行为多行 如何计算文本框中换行的行数 你可以使用String Split int lineCount txt Text Split new n r StringSplitOptions None Length
  • C# 5 async/await 线程机制感觉不对?

    为什么让调用线程进入异步方法直到内部 等待 一旦调用异步方法就生成一个线程 这不是更干净吗 这样您就可以确定异步方法会立即返回 您不必担心在异步方法的早期阶段没有做任何昂贵的事情 我倾向于知道某个方法是否要在 我的 线程上执行代码 不管是堵
  • 如何调试 .NET 运行时中的内部错误?

    我正在尝试调试一些处理大文件的工作 代码本身works 但 NET 运行时本身会报告零星错误 对于上下文 这里的处理是一个 1 5GB 文件 仅加载到内存中一次 在循环中处理和释放 故意尝试重现此否则不可预测的错误 我的测试片段基本上是 t
  • INotifyPropertyChanged 和 propertyName

    我一直不确定它的含义propertyName实施时INotifyPropertyChanged 所以一般来说你实现INotifyPropertyChanged as public class Data INotifyPropertyChan

随机推荐