Wcf data services WCF数据服务:模拟操作上下文

Wcf data services WCF数据服务:模拟操作上下文,wcf-data-services,Wcf Data Services,出于测试目的,我们想模拟OperationContext类。我们正在使用“Mock”。但是OperationContext是一个密封的类,不能被模拟。因此,我们试图创建一个虚拟OperationContext对象。但是OperationContext构造函数将IContextChannel作为参数。我们想知道一种获得IContextChannel的方法,以便将其传递给OperationContext构造函数。包含许多包装类和接口,允许进行此类操作。一般建议如下 如何做到这一点的例子有很多 我们将

出于测试目的,我们想模拟
OperationContext
类。我们正在使用“Mock”。但是
OperationContext
是一个密封的类,不能被模拟。因此,我们试图创建一个虚拟
OperationContext
对象。但是
OperationContext
构造函数将
IContextChannel
作为参数。我们想知道一种获得
IContextChannel
的方法,以便将其传递给
OperationContext
构造函数。

包含许多包装类和接口,允许进行此类操作。

一般建议如下

如何做到这一点的例子有很多

我们将对OperationContext的引用替换为对 操作响应。operationResponse应定义为 接口,可以像 存储库在给出的示例中。我们的测试方法现在变得 略短,可读性更强

而且

我们暂时考虑一下执行授权的必要性。你 无法检查OperationContext.Current在您的每个 操作实现,但这将是混合关注点(业务 操作中实现的逻辑(与授权混合)。 正确的方法是提供一个派生自 ServiceAuthorizationManager,并将服务配置为使用此 类进行授权。这将允许您保持单元测试 您的操作实现,但显然,您还需要进行测试 授权管理器本身,结果是集成 测试是完成此任务的最简单方法

如果您仍然需要模拟,请遵循

你所要做的就是更换电话 toOperationContext.GetCallbackChannel带有抽象内容。在…上 .NET3.5中,最简单的抽象是Func,它具有相同的 签名,但如果您使用的是.NET3.0,则始终可以定义类似的 您自己的委托类型

或者,作为最后的求助手段,您可以使用

例如,如果您想在中使用模拟版本,这非常有用 开发,并始终在生产中使用WCF版本。就这些,你 一次不需要触及现有的服务实现 您定义了该别名,服务就可以进行测试了

您对OperationContext.Current.Channel.SessionId的所有调用都将获得 被MockedOperationContext截获,但仅在测试中 模拟操作上下文。在您的正常环境中 MockedOperationContext充当真实OperationContext的代理


你能提供包装类的名称吗?我无法在链接处查看文档。
#if DEBUG
     using WebOperationContext = System.ServiceModel.Web.MockedWebOperationContext;
#endif