WCF数据服务:模拟OperationContext
我们想模拟OperationContext
类用于测试目的。我们正在使用'模拟'。但OperationContext
是一个密封的类,不能被嘲笑。因此我们正试图创建一个虚拟OperationContext
对象。但OperationContext
构造函数需要IContextChannel
作为参数。我们想知道一种方法来获得IContextChannel
,以便它可以传递给OperationContext
构造函数。WCF数据服务:模拟OperationContext
一般建议是implement wcf services without referencing wcf。
例子如何做到这一点是http://marcin.floryan.pl/blog/2012/01/do-we-really-need-wcfmock
我们替换到 operationResponse基准的基准来的OperationContext。 operationResponse应该定义为一个 接口,并且可以在构造函数中注入,就像给出的示例中的 存储库一样。我们的测试方法现在变为 稍短且更具可读性。
而且在http://blogs.msdn.com/b/ploeh/archive/2006/12/04/integrationtestingwcfservices.aspx
让我们,一会儿,考虑到执行授权的必要性。您可以直接在您的每个 操作实施中检查OperationContext.Current,但这会混合考虑(业务 逻辑中执行的操作与授权混合在一起)。 正确的方法是提供从 ServiceAuthorizationManager派生的类,并将服务配置为使用此类 类进行授权。这可以让你保持你的操作实现的单元测试 ,但很明显,你还需要测试 授权管理器本身,事实证明,集成测试是完成这项任务的最简单方法。
如果您仍需要模拟遵循建议从http://blogs.msdn.com/b/ploeh/archive/2008/06/28/unit-testing-duplex-wcf-services.aspx
所有你需要做的是用抽象的东西来代替电话 toOperationContext.GetCallbackChannel。在.NET 3.5上,最简单的抽象是Func,它具有相同的 签名,但如果您使用.NET 3.0,则始终可以定义类似的 您自己的委托类型。
或者作为最后手段可以使用WCFmock
#if DEBUG
using WebOperationContext = System.ServiceModel.Web.MockedWebOperationContext;
#endif
例如,这是有用的,如果你想在 开发使用嘲笑版本,始终WCF版生产。这一切,你 不需要触摸你现有的服务实现可言,一旦 你定义的别名,该服务已准备好进行测试
从http://blog.gfader.com/2010/08/how-to-unit-test-wcf-service.html
所有调用的OperationContext .Current.Channel.SessionId得到 被MockedOperationContext拦截,但是只有在你的测试中,你是 嘲讽OperationContext。在您正常的环境中,MockedOperationContext充当真实OperationContext的代理。
你能提供包装类的名字吗?我在链接中看不到文档。 – 2013-07-11 11:57:47