Автоматизировать тестирование связи веб-сервиса - PullRequest
5 голосов
/ 29 августа 2008

У меня есть приложение, которое отправляет сообщения на внешний веб-сервис. Я создаю и внедряю это приложение, используя MSBuild и Cruisecontrol.NET . Когда CCNET создает и развертывает приложение, оно также запускает набор тестов, используя NUnit . Теперь я хотел бы также проверить связь с веб-сервисом.

Моя идея заключается в том, что в рамках процесса сборки должен быть создан веб-сервис (на основе WSDL внешних веб-сервисов) и развернут на локальном веб-сервере серверов сборки. Все, что нужно сделать веб-сервису - это получить сообщение и поместить его в файловую систему, чтобы я мог проверить его, например, с помощью обычного NUnit. Это также облегчит разработку, поскольку новым разработчикам потребуется только запустить сценарий сборки и начать работу (не нужно тратить время на настройку соединения со сторонней службой).

Существуют ли какие-либо существующие утилиты , которые легко издеваются над веб-сервисом на основе WSDL? Кто-нибудь делал что-то подобное, используя MSBuild?

Есть ли другие способы тестирования этого сценария?

Ответы [ 5 ]

3 голосов
/ 29 августа 2008

Я только начал изучать http://www.soapui.org/, и похоже, что он отлично подойдет для тестирования веб-сервисов.

Также, возможно, посмотрите на добавление уровня абстракции в ваш веб-сервис, каждый вызов сервиса будет напрямую вызывать тестируемый метод (вне веб-области)? Я только что сделал это с большим проектом, над которым я работаю, и его тестируемость работает хорошо.

1 голос
/ 12 февраля 2009

Это также может быть что-то - MockingBird . Смотри полезно.

1 голос
/ 07 октября 2008

Взгляните на NMock2 . Это продукт с открытым исходным кодом, позволяющий создавать «виртуальные» реализации для интерфейсов, поддерживающих насыщенное и глубокое взаимодействие.

Например, если ваш интерфейс WS называется IService и имеет метод Data GetData(), вы можете создать макет, который требует один раз вызвать метод и вернуть новый объект Data:

var testService = mockery.NewMock<IService>();
Expect
    .Once
    .On(testService)
    .Method("GetService")
    .WithNoArguments()
    .Will(
        Return.Value(new Data());

В конце теста вызовите mockery.VerifyAllExpectationsHaveBeenMet(), чтобы убедиться, что метод GetData действительно был вызван.

P.S .: не путайте проект "NMock2" с "NMock RC2", который также называется "nmock2" в sourceforge. NMock2-the-project, похоже, заменил NMock.

1 голос
/ 07 октября 2008

В общем, очень хороший способ проверить подобные вещи - использовать фиктивные объекты .

На работе мы используем продукт TypeMock для тестирования таких вещей, как взаимодействие с веб-службой и другие внешние зависимости. Это стоит денег, поэтому по этой причине он может не подходить для ваших нужд, но я думаю, что это фантастический продукт. По личному опыту могу сказать, что он очень хорошо интегрируется с NUnit и CCNet.

У него очень простой синтаксис, где вы в основном говорите: «Когда вызывается этот метод / свойство, я хочу, чтобы вы вместо этого возвращали это значение». Он отлично подходит для тестирования таких вещей, как сбои в сети, отсутствие файлов и, конечно же, веб-сервисы.

0 голосов
/ 10 апреля 2009

На моем рабочем месте мы используем Typemock и nUnit для нашего модульного тестирования.

...