Как использовать WCFMock с DI для насмешки OperationContext
Я смотрю на WCFMock для поддержки модульного тестирования моих служб WCF, которые полагаются на данные в OperationContext.
Если я правильно понимаю, мои службы должны получить экземпляр IOperationContext, который сопоставлен с экземпляром OperationContextWrapper.
OperationContextWrapper имеет перегрузку конструктора, которая принимает экземпляр OperationContext (конструктор, который будет использоваться для тестирования), или, если ничего не передано, по умолчанию используется OperationContext.Current (это путь, который будет происходить во время фактического производства).
Я не нашел ни одного примера Mocking IOperationContext, который позволил бы мне просматривать / добавлять в коллекции IncomingMessageHeaders и OutgoingMessageHeaders.
У кого-нибудь есть пример этого?
Я заметил, что WCFMock был создан еще в 2009 году. Является ли это все еще оптимальным способом насмешки над контекстом операции?
3 ответа
Используйте SetupGet для возврата необходимого значения свойства
var mockContext = new Mock { DefaultValue = DefaultValue.Mock }; var headers = новые MessageHeaders(MessageVersion.Default); headers.Add(MessageHeader.CreateHeader("headerName", "Namespace", "value")); mockContext.SetupGet(x => x.IncomingMessageHeaders).Returns(() => заголовки); использование (новый MockedOperationContext(mockContext.Object)) { // протестируй свой сервис }
У меня была похожая проблема, мое решение включает использование существующего wcfclient и получение его innerChannel.
OperationContext.Current = new OperationContext(new MyWcfClient().InnerChannel);
OperationContext.Current.OutgoingMessageProperties["MyData"] = "somedata that i needed";
Я надеюсь, что это помогает кому-то
Мне не удалось заставить WCFMock работать должным образом, чтобы издеваться
OperationContext
; однако мне удалось найти способ создать два
ServiceHost
вот что при вызове создает свои собственные контексты, заголовки и т. д. См. этот ответ .