2013-12-24 2 views
0

Я смотрел WCFMock для поддержки модульного тестирования моих служб WCF, которые полагаются на данные в OperationContext.Как использовать WCFMock w/DI для подделки OperationContext

Если я правильно понимаю, мои службы должны получить экземпляр IOperationContext, который сопоставляется экземпляру OperationContextWrapper.

ОперацияContextWrapper имеет перегрузку конструктора, которая принимает экземпляр OperationContext (конструктор, который будет использоваться для тестирования), или если ни один не передан, по умолчанию используется OperationContext.Current (это путь, который будет происходить во время фактического производства).

Я не нашел примеров Mocking IOperationContext, которые позволят мне проверять/добавлять в коллекции IncomingMessageHeaders и OutgoingMessageHeaders.

Есть ли у кого-нибудь пример этого?

Я заметил, что WCFMock был создан еще в 2009 году. Является ли это по-прежнему оптимальным способом насмешки в контексте работы?

ответ

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 
    } 
0

У меня была аналогичная проблема, мое решение связано с использованием существующего wcfclient и получить его innerChannel.

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

Я надеюсь, что это помогает кто-то

Смежные вопросы