如何使用WCFMock w / DI来模拟OperationContext

时间:2013-12-24 22:14:06

标签: wcf unit-testing mocking operationcontext

我一直在寻找WCFMock来支持依赖OperationContext中数据的WCF服务的单元测试。

如果我理解正确,我的服务应该接收IOperationContext的一个实例,该实例映射到OperationContextWrapper的一个实例。

OperationContextWrapper有一个构造函数重载,它接受一个OperationContext实例(用于测试的构造函数),或者如果没有传递,则默认为OperationContext.Current(这是在实际生产期间将发生的路径)。 / p>

我没有找到Mocking IOperationContext的任何示例,它允许我检查/添加到IncomingMessageHeaders和OutgoingMessageHeaders集合。

有人有这方面的例子吗?

我注意到WCFMock是在2009年创建的。这仍然是模拟操作上下文的最佳方式吗?

3 个答案:

答案 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