PHP mock данные из конечной точки отдыха

Я пишу обертку PHP вокруг стороннего API. Более того, для практики, но я также не вижу хорошего в любой момент, так что, возможно, он будет использоваться другими в будущем.

Мои модульные тесты были довольно простыми, за исключением случаев, когда я попал в лимит.

Разработчик API получил ограничение максимальных запросов (1 в секунду, 20 в минуту), а мои модульные тесты получают доступ к конечным точкам API через мою API-оболочку, следовательно, тестирование моей оболочки. Однако запущенный phpunit начал возвращать 429 too many requests . Очевидно, что Phpunit запускает те же тесты, что и у меня, все из которых слишком быстро обращаются к конечным точкам и дают мне эту ошибку.

Кто-нибудь знает, должен ли я a) высмеивать эти ответы , и б) как я буду издеваться над ответами, если я тестирую свою обертку? , Что хорошего в тестах, если они не работают на моем фактическом объекте-оболочке и, конечно же, я не хочу, чтобы мои обманщики использовали макетные ответы?

Я новичок в модульном тестировании, я чувствую себя очень неудобно с этой идеей на данный момент, однако я начинаю согреваться!

Очень хороший вопрос! Это обычная проблема, когда вы новичок в тестировании.

Во-первых, сделайте различие между тестированием модулей и интеграции:

  • модульное тестирование – тестирование «единицы», чаще всего класс, в изоляции. Это достигается за счет издевательств или зависимостей блоков. На этом уровне не следует использовать инфраструктуру (сеть, файловая система и т. Д.).
  • интеграционное тестирование – тестирование взаимодействия компонентов друг с другом. Вы можете попасть в infrastrcuture, но вы все равно можете не хотеть (оптимизировать).

Я бы сделал следующее:

  • Внедрите клиент API как библиотеку и запишите для него интеграционные тесты. Эти интеграционные тесты на самом деле попадут в API и докажут, что клиент взаимодействует с API, как ожидалось. Я буду запускать их каждый раз, когда клиент API изменяет или периодически, чтобы убедиться, что я все еще совместим с API. Эти тесты не будут выполняться так часто, как тесты приложений, поскольку они будут частью отдельного набора тестов.
  • Внесите абстракцию в приложение, которое позволит мне предоставить альтернативные реализации для любых взаимодействий с API. Таким образом, я смогу написать прием или другие интеграционные тесты с более простой реализацией (например, в памяти).
  • Убедитесь, что, если я делаю предположение в приложении о том, как работает клиент API, у меня есть интеграционные тесты, подтверждающие правильность этого предположения. Например, если я вызываю метод с допустимым идентификатором, он возвращает объект. В противном случае это исключает. Я могу полагаться на эти правила, только если у меня есть проверочный тест интеграции.

Издевательские ответы – сложный бизнес. Если вы попытаетесь сделать это в один прекрасный день, вы столкнетесь с проблемами при изменении стороннего API. Если вы все еще хотите пройти этот путь, посмотрите https://github.com/coduo/tutu .