Общая рекомендация - реализовать службы wcf без ссылки на wcf .
Примеры того, как это сделать, приведены в http://marcin.floryan.pl/blog/2012/01/do-we-really-need-wcfmock
Мы заменили ссылкув OperationContext со ссылкой на OperationResponse.OperationResponse должен быть определен как интерфейс и может быть вставлен в конструктор так же, как хранилище в приведенном примере.Наш метод тестирования теперь становится немного короче и более читабельным.
И в http://blogs.msdn.com/b/ploeh/archive/2006/12/04/integrationtestingwcfservices.aspx
Давайте на минуту рассмотрим необходимость выполнения авторизации.Вы можете проверить OperationContext.Current непосредственно в каждой из ваших реализаций операций, но это будет смешивать проблемы (бизнес-логика, реализованная в операции, смешанной с авторизацией).Правильный способ - предоставить класс, производный от ServiceAuthorizationManager, и настроить службу для использования этого класса для авторизации.Это позволило бы вам продолжать модульное тестирование ваших реализаций операций, но, очевидно, вам также необходимо протестировать сам менеджер авторизации, и оказывается, что интеграционное тестирование - это самый простой способ выполнить эту задачу.
Если вам все еще нужно использовать макет, следуйте рекомендациям http://blogs.msdn.com/b/ploeh/archive/2008/06/28/unit-testing-duplex-wcf-services.aspx
Все, что вам нужно сделать, это заменить вызов toOperationContext.GetCallbackChannel чем-то абстрактным.В .NET 3.5 самая простая абстракция - это Func, которая имеет ту же сигнатуру, но если вы работаете в .NET 3.0, вы всегда можете определить свой собственный аналогичный тип делегата.
В качестве альтернативыВ последнем случае вы можете использовать WCFmock
#if DEBUG
using WebOperationContext = System.ServiceModel.Web.MockedWebOperationContext;
#endif
Это полезно, например, если вы хотите использовать макетированную версию в разработке и всегда версию WCF в производстве.Вот и все, вам вообще не нужно прикасаться к существующей реализации службы, после того как вы определили этот псевдоним, служба готова к тестированию
С http://blog.gfader.com/2010/08/how-to-unit-test-wcf-service.html
все ваши вызовы OperationContext.Current.Channel.SessionId перехватываются MockedOperationContext, но только в ваших тестах вы издеваетесь над OperationContext.В вашей обычной среде MockedOperationContext действует как прокси для реального OperationContext.