2012-02-25 6 views
8

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

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

Из моего понимания, хотя - модульные тесты должны быть быстрыми. Раньше я бы издевался над db, и теперь я издеваюсь над http, но должен ли я использовать конкретную реализацию HTTP, поэтому я сразу уведомляю об изменении взлома api? Или есть лучший способ приблизиться к этой ситуации?

ответ

4

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

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

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

Проблемы с этим являются численными; с верхней части моей головы:

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