2010-09-02 2 views
0

У меня есть служба WCF с простым тестовым модулем Gallio, который вызывает услугу. Однако меня смущает поведение каркаса. Когда я начинаю визуально студию в первый раз, и попробуйте запустить модульный тест, я получаю следующее сообщение об ошибке:Модульное тестирование веб-сервиса WCF с Gallio/MbUnit

System.ServiceModel.EndpointNotFoundException: There was no endpoint listening at http://localhost:43671/MyService.svc/MyService that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details. ---> System.Net.WebException: Unable to connect to the remote server ---> System.Net.Sockets.SocketException: No connection could be made because the target machine actively refused it 127.0.0.1:43671 ErrorCode: 10061

Однако, если я правой кнопкой мыши на ссылку на службу в единичном тестовом проекте и сделать «Обновить service reference ", появляется всплывающее сообщение о том, что сервер ASP.NET Development на порте 43671 запущен, и модульный тест работает нормально.

Как добавить код запуска сервера к модульному тесту, поэтому мне не нужно «Обновить ссылку на службу» каждый раз, когда я хочу запустить единичный тест?

Спасибо.

ответ

3

Это происходит потому, что ваш хост службы WCF не запускается при запуске visual studio. После того, как вы попытаетесь обновить служебную ссылку, Visual Studio автоматически запустит узел службы WCF, после чего ваши службы будут доступны.

Один из способов решения этой проблемы - разместить ваши службы в IIS. Это обеспечит доступность сервисов, даже если VS не запущен.

Другим решением было бы добавить ссылку (ссылку на сборку) в вашу службу и создать экземпляр класса обслуживания напрямую. Вам не нужно, чтобы служба работала для запуска модульных тестов. Поэтому, если у вас есть класс обслуживания, который называется SomeServiceClass, вы можете создать экземпляр этого класса в своих модульных тестах (SomeServiceClass instance = new SomeServiceClass()) и написать свои утверждения против него (даже без хостинга службы).

0

Вы можете самостоятельно разместить услугу, используя ServiceHost. Если вы используете это в кодах запуска ваших модульных тестов, служба WCF будет размещаться в модульном тесте.

Я не уверен, где app.config предназначен для модульных тестов, которые вы размещаете. Однако вы всегда можете запустить услугу в отдельном AppDomain и установить AppDOmainSetup.ConfigurationFile