PHPUnit WebServices Extension
Возможность регистрировать тестовых слушателей в PHPUnit делает его чрезвычайно простым для выполнения действий при определённом состоянии тестового раннера (например, когда тест запущен). WSUnit активно использует эту возможность и слушает некоторые из излучаемых сигналов.
Цель WSUnit поднимает модульные тесты до функциональных тестов путём настройки. После настройки тестовый слушатель отправляет запрос в указанное место, записывает тело и заголовок ответа и сохраняет их в файловой системе. Затем сам тест, например, проверяет правильность ответа. Идея заключалась в том, чтобы не быть вынужденным писать API-тесты более одного раза и увеличить повторное использование уже написанных проверок.
Установка Не так много нужно для установки, кроме как загрузить исходные коды, настроить тестового слушателя в phpunit.xml.dist и создать файл конфигурации, чтобы сообщить слушателю, какой тест должен вызывать какой URL для получения ответа. Если вы используете composer, вам просто нужно определить зависимость от WSUnit в вашей конфигурации и настроить WSUnit согласно следующему описанию.
Composer
{
"require-dev": {
"lapistano/wsunit": " 2.*"
}
}
Эта конфигурация composer проверит источники, помеченные как второй выпуск. В случае, если вы хотите получить «самую свежую» версию, замените «2.*» на «dev-master». Но имейте в виду, что это иногда может привести к ошибкам.
Примечание: если вы не знаете, что это значит, веб-сайт проекта composer — хорошее место для начала.
Github Таким образом, я рекомендую использовать способ composer, чтобы сделать прокси-объект зависимостью вашего проекта. Исходные коды также доступны через github. Просто клонируйте его, как вы, возможно, привыкли.
$ git clone git://github.com/lapistano/wsunit.git
$ mkdir -p wsunit/vendor/lapistano
$ cd wsunit/vendor/lapistano
$ git clone git://github.com/lapistano/proxy-object.git
Конфигурация Конфигурация состоит из двух частей. Одна — это регистрация фактического тестового слушателя в PHPUnit, вторая — определение того, какой тест (идентифицированный по его имени) должен запрашивать ответ от какого местоположения.
PHPUnit Для конфигурации PHPUnit посетите http://www.phpunit.de/manual/current/en/appendixes.configuration.html и прочитайте раздел «Test Listener» или скопируйте пример в свою конфигурацию и просто адаптируйте местоположение вашего файла конфигурации.
<listeners>
<listener class="\lapistano\wsunit\WebServiceListener">
<arguments>
<object class="\lapistano\wsunit\ExtensionsWebserviceListenerFactory"/>
<object class="\lapistano\wsunit\Loader\LoaderConfiguration"/>
<array>
<element key="httpClient">
<string>lapistano\wsunit\Http\HttpClient</string>
</element>
<element key="logger">
<string>lapitano\wsunit\Logger\LoggerFilesystem</string>
</element>
<element key="configuration">
<string>/path/to/configuration.xml</string>
</element>
</array>
</arguments>
</listener>
</listeners>
(object) Extensions_Webservice_Listener_Factory — класс фабрики, предоставляющий объекты, необходимые для работы слушателя. (object) Extensions_Webservice_Listener_Loader_Configuration — объект для загрузки файла конфигурации. (array) содержит имена классов, которые должны быть зарегистрированы на фабрике, и местоположение файла определения местоположения.
Настройка тестового слушателя Помимо информирования PHPUnit о тестовом слушателе и фактического выполнения каждого... Тест учитывает местоположение, из которого будет получен ответ. Требуется второй файл конфигурации. Следующий пример показывает такую конфигурацию.
Примечание:
Имя и расположение файла конфигурации задаются в элементе element[key='configuration']
регистрации прослушивателя теста в PHPUnit.
Предупреждение: Помните, что если вы решите использовать пространства имён, они также должны быть использованы в файле конфигурации PHPUnit для идентификации используемых классов. В случае, если вы что-то сделаете неправильно, PHPUnit просто проигнорирует ваш прослушиватель без каких-либо предупреждений или ошибок. Не спрашивайте меня, откуда я это знаю. Это поведение исправлено в PHPUnit 3.7.
<?xml version="1.0" encoding="UTF-8"?>
<listener>
<serializer>\lapistano\wsunit\Serializer\Http\Extensions_Webservice_Serializer_Http_Response</serializer>
<test case="Example_TestCase" name="testGetData">
<location href="http://example.org/data.txt" />
</test>
<test case="\lapistano\wsunit\Extensions_Webservice_Constraint_JsonErrorMessageProviderTest"
name='testTranslateTypeToPrefix with data set "expected"'
>
<serializer>\lapistano\wsunit\Serializer\Http\Extensions_Webservice_Serializer_Http_Response</serializer>
<location dataName="expected" href="http://blog.bastian-feder.de/blog.rss">
<query>
<param name="mascott[]">tux</param>
<param name="mascot[RedHat]">beastie</param>
<param name="os">Linux</param>
</query>
</location>
</test>
</listener>
### Доступные теги
- **test**
Каждый тест, который должен быть распознан, представлен тегом «test» и заключён в корневой тег «listener». Тест распознаётся по атрибуту «case» теста и имени (атрибут «name») теста. Если ваш тест регистрирует поставщика данных, имейте в виду, что имя теста будет изменено PHPUnit (см. второй раздел теста в примере).
- **serializer**
Этот тег можно определить в теге <listener>, чтобы использовать сериализацию в целом, или в конфигурации <test>, чтобы переопределить глобально установленный сериализатор.
- **location**
Определяется в разделе теста, он определяет местоположение и его необязательную строку запроса. Как только эта информация будет установлена, настроенное местоположение будет использоваться для получения ответа.
Зависимости
============
- [PHPUnit](http://github.com/sebastianbergmann/phpunit)
Дополнительно
--------
- [proxy-object](http://github.com/lapistano/proxy-object), если вы хотите запустить набор тестов. Его необходимо поместить в каталог vendor, расположенный в корне проекта. Вы можете либо клонировать его с github, либо использовать composer для его получения.
Что предстоит сделать
==========
Пока что ws unit далёк от завершения. Следующий список даст вам представление о том, чего ожидать дальше:
- Добавить имя тестового случая к имени сохранённого файла фикстуры, чтобы обеспечить уникальность.
- Реализовать общий (запасной) сериализатор, чтобы иметь возможность сохранять любой ответ.
- Обеспечить возможность использования wsunit с Symfony2 (это уже может быть нормально, но ещё не проверено).
- Открыть новый репозиторий для сериализаторов, загрузчиков и регистраторов, чтобы быть максимально совместимым.
- Предоставить больше реализаций сериализатора, загрузчика и регистратора (например, для загрузки конфигурации из файлов yml).
Если у вас есть другие варианты использования, идеи или требования, не стесняйтесь разветвляться и вносить свой вклад. Мы будем рады ;)
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )