如何在WCF ServiceAuthorizationManager中模拟IContextChannel?

如何在WCF ServiceAuthorizationManager中模拟IContextChannel?

问题描述:

我正在尝试编写自定义ServiceAuthorizationManager的单元测试。对CheckAccessCore的调用需要一个OperationContext作为参数。为了实例化OperationContext,必须将IContextChannel传递给构造函数。使用MOQ,我宣布一个IContextChannel:如何在WCF ServiceAuthorizationManager中模拟IContextChannel?

private OperationContext _context; 
private Mock<IContextChannel> _contextChannelMock; 

然后我试图创建的OperationContext:

_context = new OperationContext(_contextChannelMock.Object); 

,但此行抛出异常:

结果消息:初始化方法 Urs.EnterpriseServices.Providers.Tests.UrsServiceAuthorizationManager_Tests.SetUp 引发异常。 System.InvalidOperationException: System.InvalidOperationException:无效的IContextChannel传递给 OperationContext。必须是服务器调度通道或 客户端代理渠道..

如何嘲笑,服务器调度通道?

+0

你使用什么代码来设置你的'Mock ''的'Object'属性? – 2013-04-29 18:42:23

+0

目前没有。我试图设置每个属性,我仍然有错误。 – Steve 2013-04-29 18:44:16

你不能直接。看看WCFMock会有帮助。

+0

感谢您的链接,它没有我需要的与ServiceAuthorizationManager一起工作的模拟,从我所看到的。这是不幸的,因为我想有可测试的授权逻辑。 – Steve 2013-04-29 19:34:49

+0

我想我可以写一个使用OperationContext包装器的新方法,然后所有东西都可以测试。 – Steve 2013-04-29 19:43:52

+0

是的,它的工作。谢谢。 – Steve 2013-04-29 20:44:55