Как провести модульное тестирование вашего API? - PullRequest
46 голосов
/ 28 июня 2010

Я нахожусь в точке, где мне нужно написать модульные тесты для REST API, написанного с использованием CakePHP 1.3. API поддерживает запросы GET, POST и PUT для запроса и обработки данных.

Существует ли какой-либо установленный способ проверки правильности ввода / вывода API, имитирующего HTTP-запрос, с использованием fixtures ? Я не хочу запускать реальные запросы POST / PUT для базы данных live (dev). Как лучше всего смоделировать систему, чтобы использовать временные модели, и при этом протестировать оставшуюся часть стека как есть?


Тестирование GET-запросов достаточно просто с проверками контроллера . Однако для манипулирования данными API довольно широко использует заголовки HTTP, а также анализирует необработанные данные XML и JSON POST / PUT. Методы тестирования модуля контроллера только проверяют данные POST, устанавливая $this->data в контроллере, что не позволяет мне правильно тестировать API.

Ответы [ 3 ]

5 голосов
/ 28 июня 2010
4 голосов
/ 14 января 2015

Вы должны либо создать Mocks, либо использовать Isolation Framework для имитации среды API.Модульные тесты не должны зависеть от таких ресурсов, как интернет-соединения, сеть, конечные точки и т. Д.

Если вы собираетесь тестировать реальные вызовы API, вам следует создать проект интеграционного тестирования и использовать его для этой цели.Но имейте в виду, что интеграционные тесты в большинстве своем не повторяются и дают разные результаты при каждом запуске.

3 голосов
/ 05 июля 2010

Похоже, что вы можете без проблем тестировать необработанные данные XML PUT и POST. Документация CakePHP REST гласит:

Если запрос POST или PUT имеет тип содержимого XML, то входные данные берутся и передаются экземпляру объекта Xml Cake,который присваивается свойству $ data контроллера.Благодаря этой функции параллельная обработка данных XML и POST происходит без проблем: никаких изменений в коде контроллера или модели не требуется.Все, что вам нужно, должно заканчиваться $ this-> data.

Попробуйте пройти по коду вашего контроллера в режиме отладки, чтобы увидеть, что на самом деле проходит через $this->data во время запроса XML.

Что касается избежания активной базы данных, будет ли база данных SQLite в памяти легче?

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