Модульное тестирование веб-сервиса WCF с Gallio / MbUnit - PullRequest
0 голосов
/ 02 сентября 2010

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

System.ServiceModel.EndpointNotFoundException: не было конечной точки, прослушивающей http://localhost:43671/MyService.svc/MyService, которая могла бы принять сообщение. Это часто вызвано неправильным адресом или действием SOAP. Смотрите InnerException, если имеется, для более подробной информации. ---> System.Net.WebException: невозможно подключиться к удаленному серверу ---> System.Net.Sockets.SocketException: невозможно установить соединение, так как целевой компьютер активно отказал ему 127.0.0.1:43671 Код ошибки: 10061

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

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

Спасибо.

Ответы [ 2 ]

3 голосов
/ 02 сентября 2010

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

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

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

0 голосов
/ 02 сентября 2010

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

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

...