Модульное тестирование REST API - PullRequest
8 голосов
/ 25 февраля 2012

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

Теперь я создаю реализацию API-оболочки, которая будет использовать веб-службы RESTful. Отправленная мне структура результатов json, например, не из моих рук: Twitter. Я просто строю клиент для взаимодействия с их API. Я не уверен, как идти о модульном тестировании результата json. Сейчас я просто высмеиваю результат запроса http со статической структурой json. Это гарантирует, что десериализация json для моих pojos верна, но я обеспокоен изменениями API. Что делать, если структура API меняется? Что если API в настоящее время возвращает «title» сегодня и «groovy_title» завтра? Мой юнит тест не поймал бы это.

Хотя, насколько я понимаю, юнит-тесты должны быть быстрыми. Раньше я издевался над БД, а теперь я издеваюсь над http, но должен ли я на самом деле использовать конкретную реализацию http, чтобы я сразу же получал уведомление о нарушении API? Или есть лучший способ подойти к этой ситуации?

1 Ответ

4 голосов
/ 25 февраля 2012

Я бы продолжал делать то, что вы делаете, и издеваться над интерфейсом между вашим кодом и внешним API. Как вы указали, это не будет определять изменения во внешнем API.

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

Обратите внимание, что вы можете создавать эти тесты без использования кода вашего приложения; то есть просто wget или curl и сделайте некоторый анализ результатов ...

Проблемы с этим многочисленны; с макушки головы:

Вам необходимо подключение к сети
Медленнее
Внешняя служба может быть временно недоступна, т. Е. Сбой может означать разные вещи.
и т.д.

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