5

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

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

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

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

ответ

3

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

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

+0

Я использовал soapui для функционального тестирования и тестирования производительности наших веб-сервисов, и он отлично работает :) – 2008-10-07 11:26:09

1

В общем, очень хороший способ проверить такие вещи, как использование mock objects.

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

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

1

Посмотрите на 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.

0

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

Смежные вопросы