Как выполнить модульный тест веб-службы C # с Visual Studio 2008 - PullRequest
11 голосов
/ 16 декабря 2008

Как вы должны проводить модульное тестирование веб-службы в C # с Visual Studio 2008? Когда я создаю модульный тест, он добавляет фактическую ссылку на класс веб-службы вместо веб-ссылки. Устанавливает атрибуты, указанные в:

http://msdn.microsoft.com/en-us/library/ms243399(VS.80).aspx#TestingWebServiceLocally

Тем не менее, он завершится без выполнения теста. Я попытался добавить вызов к WebServiceHelper.TryUrlRedirection(...), но вызову не нравится цель, поскольку он наследуется от WebService, а не WebClientProtocol.

Ответы [ 6 ]

24 голосов
/ 16 декабря 2008

То, что я обычно делаю, - это не тестирование непосредственно на веб-сервисе, а попытка добавить как можно меньше кода в сервис и вызвать другой класс, который выполняет всю реальную работу. Затем я пишу модульные тесты для этого другого класса. Оказывается, что иногда класс может быть полезен вне контекста веб-службы, поэтому, таким образом, вы получаете в два раза больше.

8 голосов
/ 16 декабря 2008

Если вы пишете веб-сервис, попробуйте поместить всю логику в другой (тестируемый) слой. Каждый веб-метод должен иметь как можно меньше кода. Тогда у вас будет мало причин для непосредственного тестирования веб-метода, поскольку вы можете протестировать нижележащие слои.

[WebMethod]
public void DoSomething()
{ 
   hander.DoSomething();
}

Если вы используете веб-метод, оберните сгенерированный вызывающий объект в оболочку класса и реализуйте интерфейс для оболочки класса. Затем в любое время, когда вам нужно вызвать веб-сервис, используйте интерфейс для вызова метода. Вы хотите использовать интерфейс, чтобы сделать обертку класса способной к замене во время тестирования (используя Rhino Mocks, Moq или TypeMock).

1 голос
/ 27 апреля 2010

У меня тоже были проблемы с этим, поэтому я использую этот обходной путь: http://techkn0w.wordpress.com/2009/07/01/unit-testing-an-asmx-web-service-in-visual-studio-2008/

1 голос
/ 16 декабря 2008

Вы можете добавить ссылку на сервис к вашему проекту модульного теста или сгенерировать свою заглушку клиента и поместить класс в свой проект модульного теста.

0 голосов
/ 05 августа 2011

Знайте, что есть два типа веб-службы. Те, которые вы пишете сами и хотите проверить, и те, которые вы потребляете. Для первых применяются вышеуказанные правила. Однако я бы сказал, что иногда я вижу, как разработчики тестируют внешние веб-сервисы. Логика диктует, что сторонний сервис ненадежен и поэтому требует гораздо большего тестирования. В объектно-ориентированном программировании лучше всего понимать разделение проблем, о которых нам все рассказывали Мартин Фаулер и другие. Это означает, что мы не должны тестировать системы, внешние по отношению к нашим.

Однако мне нравится писать классы-обертки, чтобы предоставлять полезную функциональность для сервисов. Например, Bing Maps имеет ряд удивительно мощных функций. Я пишу тесты против них, просто чтобы убедиться, что они дают мне ожидаемые значения. Хотя они и не являются обширными, суть в том, что если веб-служба по какой-либо причине умирает (истекает срок действия ключа аутентификации и т. Д.), То об этом мне можно сообщить через тестовый сервер.

0 голосов
/ 26 июня 2009

Над моими модульными тестами веб-метода у меня есть следующее:

// TODO: Ensure that the UrlToTest attribute specifies a URL to an ASP.NET page (for example,
// http://.../Default.aspx). This is necessary for the unit test to be executed on the web server,
// whether you are testing a page, web service, or a WCF service.
[HostType("ASP.NET")]
[UrlToTest("http://localhost/MyWebService")]

В дополнение к обычному:

[TestMethod()]
[DeploymentItem("MyWebService.dll")]

Этот код был получен при использовании мастера модульного тестирования Visual Studio 2008.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...