1

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

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

OperationContextWrapper 有一个构造函数重载,它接受一个 OperationContext 实例(用于测试的构造函数),或者如果没有传递,则默认为 OperationContext.Current(这是实际生产过程中会出现的路径)。

我还没有找到任何 Mocking IOperationContext 示例,可以让我检查/添加到 IncomingMessageHeaders 和 OutgoingMessageHeaders 集合。

有人有这方面的例子吗?

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

4

3 回答 3

1

使用 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);
    使用(新的 MockedOperationContext(mockContext.Object))
    {
      // 测试你的服务
    }
于 2014-01-14T10:06:49.270 回答
0

我有一个类似的问题,我的解决方案涉及使用现有的 wcfclient 并检索其 innerChannel。

   OperationContext.Current = new OperationContext(new MyWcfClient().InnerChannel);
     OperationContext.Current.OutgoingMessageProperties["MyData"] = "somedata that i needed";

我希望这可以帮助别人

于 2015-09-02T21:28:31.207 回答
0

我无法让 WCFMock 正常工作来模拟OperationContext;但是我能够找到一种方法来创建两个ServiceHost,当被调用时,创建自己的上下文、标题等。请参阅此答案

于 2021-05-24T22:54:01.933 回答