Ответ 1
Я бы посоветовал начать с небольшого исследования. Эти статьи должны помочь:
Я нахожусь в точке, где мне нужно написать модульные тесты для REST API, написанные с использованием CakePHP 1.3. API поддерживает запросы GET, POST и PUT для запросов и обработки данных.
Существует ли установленный способ проверки правильного ввода/вывода API, имитирующего HTTP-запрос, используя светильники? Я не хочу запускать фактические запросы POST/PUT в базе данных live (dev). Как я могу лучше всего издеваться над системой для использования временных моделей, но проверить оставшуюся часть стека как есть?
Тестирование запросов GET достаточно просто с помощью тестов контроллера. Однако для обработки данных API использует HTTP-заголовки довольно широко, а также анализирует необработанные данные XML и JSON POST/PUT. Методы контроллера unit test только высмеивают данные POST, устанавливая $this->data
в контроллере, что не позволяет мне правильно протестировать API.
Я бы посоветовал начать с небольшого исследования. Эти статьи должны помочь:
Похоже, вы можете протестировать необработанные XML-данные PUT и POST без особых проблем. Документация CakePHP REST говорит следующее:
Если запрос POST или PUT имеет тип содержимого XML, то ввод берется и передается экземпляру объекта Cake Xml, который присваивается свойству $data контроллера. Из-за этой функции обработка данных XML и POST параллельна: все изменения не требуются для контроллера или кода модели. Все, что вам нужно, должно быть в $this- > data.
Попробуйте выполнить свой код контроллера в режиме отладки, чтобы узнать, что на самом деле происходит через $this->data
во время XML-запроса.
Как для избежания живой базы данных, будет ли SQLite база данных в памяти легче?
Вы должны либо создать Mocks, либо использовать Isolation Framework для моделирования среды API. Модульные тесты не должны зависеть от таких ресурсов, как интернет-соединения, сеть, конечные точки и т.д.
Если вы намерены протестировать реальные вызовы API, вам следует создать проект интеграции и использовать его для этой цели. Но имейте в виду, что интеграционные тесты в основном не повторяются и дают разные результаты при каждом запуске.