我一直在寻找WCFMock来支持依赖OperationContext中数据的WCF服务的单元测试。
如果我理解正确,我的服务应该接收IOperationContext的一个实例,该实例映射到OperationContextWrapper的一个实例。
OperationContextWrapper有一个构造函数重载,它接受一个OperationContext实例(用于测试的构造函数),或者如果没有传递,则默认为OperationContext.Current(这是在实际生产期间将发生的路径)。 / p>
我没有找到Mocking IOperationContext的任何示例,它允许我检查/添加到IncomingMessageHeaders和OutgoingMessageHeaders集合。
有人有这方面的例子吗?
我注意到WCFMock是在2009年创建的。这仍然是模拟操作上下文的最佳方式吗?
答案 0 :(得分:0)
使用SetupGet返回所需的属性值
var mockContext = new Mock { DefaultValue = DefaultValue.Mock }; var headers = new MessageHeaders(MessageVersion.Default); headers.Add(MessageHeader.CreateHeader("headerName", "Namespace", "value")); mockContext.SetupGet(x => x.IncomingMessageHeaders).Returns(() => headers); using (new MockedOperationContext(mockContext.Object)) { // test your service }
答案 1 :(得分:0)
我有一个类似的问题,我的解决方案涉及使用现有的wcfclient并检索其innerChannel。
OperationContext.Current = new OperationContext(new MyWcfClient().InnerChannel);
OperationContext.Current.OutgoingMessageProperties["MyData"] = "somedata that i needed";
我希望这有助于某人
答案 2 :(得分:0)
我无法让 WCFMock 正常工作来模拟 OperationContext
;但是我找到了一种方法来创建两个 ServiceHost
,当它们被调用时,创建它们自己的上下文、标题等。请参阅 this answer。