Тестирование веб-службы WCF?
Я хотел создать тестовый класс для службы WCF. Я считаю, что "насмешливый" - правильный термин для этого?
Я не уверен, что так, как мне кажется, я должен это сделать правильно. Мне присвоен URL-адрес службы WCF, например:
http:://somesite.com/wcf/RealService.svc
и
http:://somesite.com/wcf/RealService.svc?wsdl
Поэтому вместо того, чтобы фактически добавить RealService.svc
в мой проект как Service Reference
, я просто добавил новый пустой WCF Service
в мой проект под названием Service1
.
Затем я хочу использовать инструмент wsdl.exe
(или, возможно, svcutil.exe?) для создания интерфейса из URL-адреса WSDL: http:://somesite.com/wcf/RealService.svc?wsdl
.
Затем я открываю файл Service1.cs
и вместо того, чтобы letit наследуется от IService1.cs
, я наследую его от сгенерированного interface
.
Затем вместо вызова реальной службы в моем приложении я просто вызываю класс Service1
. Разве это так насмешливо работает веб-сервис??
Также нужно выяснить, как сгенерировать interface
с помощью инструмента svcutil (я читал, что я не могу использовать wsdl.exe для службы WCF?). Поэтому любые советы по этому поводу более чем приветствуются!
Ответы
Ответ 1
Многие области, на которые нужно обратить внимание, попытаются указать вам в правильном направлении:
-
Если вы хотите протестировать (то есть передать ввод, проверить вывод) свою службу WCF, используйте инструмент Visual Studio GUI WCF Test Client
(статья MSDN здесь).
-
Если вы хотите высмеять свою службу WCF (т.е. unit test ваш компонент, который использует службу WCF), используйте фальшивую фреймворк, например NMock2
, которая позволяет вам обманывать интерфейс службы (связанный поток SO здесь). Вы также можете вручную манипулировать макетом (путем реализации интерфейса), если вы не хотите использовать внешнюю фреймворк, но это более активно.
-
Если вы хотите использовать unit test вашу службу WCF (например, выполнять блок-тесты для службы, бизнеса, данных и т.д.), используйте популярную фальшивую фреймворк (связанная с ней нить здесь).
-
Чтобы создать прокси для вашей службы WCF, используйте утилиту командной строки svcutil.exe(статья MSDN здесь), поскольку вы догадывался. Эта утилита поставляется с различными опциями (язык, пространство имен, файл конфигурации и т.д.), Поэтому обратите внимание на них.
Надеюсь, что это поможет.
Ответ 2
Вы можете создать прокси-сервер с помощью svcutil.exe (из Visula Studio: Добавить ссылку на службу...). Это создаст ваш клиентский прокси и Интерфейс службы.
Например, для вашего сервиса http:://somesite.com/wcf/RealService.svc? wsdl мы получим:
- IRealService (интерфейс)
- RealServiceClient (реализует IRealService и расширяет System.ServiceModel.ClientBase)
Вы можете создать класс mock, который реализует ваш служебный интерфейс (IRealService).
И в своем приложении вместо того, чтобы инициировать конкретного клиента службы (RealServiceClient), когда вы хотите позвонить в свою службу, вы можете использовать Factory или контейнер IOC.
Таким образом вы можете решить, с каким экземпляром ваше приложение (или модули/компоненты) работает с: реальным сервисом во время выполнения, макета при тестировании.