Автоматизировать тестирование взаимодействия с веб-сервисом

StackOverflow https://stackoverflow.com/questions/34661

Вопрос

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

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

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

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

Это было полезно?

Решение

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

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

Другие советы

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

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

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

Взгляните на 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, похоже, вытеснил NMock.

Это также может быть что-то - MockingBird . Выглядит полезным.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top