Недостатки использования FakeWeb по сравнению с написанием макетов для тестирования

Мне никогда не нравилось писать издевательства, и некоторое время назад кто-то здесь рекомендовал использовать FakeWeb. Я сразу влюбился в FakeWeb. Тем не менее, я должен задаться вопросом, есть ли недостатки использования FakeWeb. Кажется, что издевательства все еще встречаются гораздо чаще, поэтому мне интересно, что мне не хватает, что неправильно с использованием FakeWeb вместо этого. Есть ли какая-то ошибка, которую вы не можете устранить с помощью Fakeweb, или это что-то вроде процесса TDD или BDD?

2 ответа

Решение

Вы должны взглянуть на WebMock http://github.com/bblimke/webmock

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

Преимущество таких библиотек, как FakeWeb или WebMock, заключается в том, что вы можете сосредоточиться на реализации поведения, а не беспокоиться о деталях реализации конкретной библиотеки клиента http. Даже если вы измените библиотеку, например, с Net::HTTP на RestClient, поведение все равно должно быть сохранено, поэтому тесты все равно будут проходить. Если вы сами макетируете http-клиента, вам придется менять тесты при изменении реализации, даже если поведение не изменилось. Использование FakeWeb или Webmock также помогает с TDD или BDD (сначала проверьте). Вы можете указать поведение http с помощью спецификаций или тестов, прежде чем беспокоиться о деталях реализации конкретного клиента http.

Вы, вероятно, будете довольны VCR, который является оболочкой для библиотек HTTP-макетов. Он кэширует исходные HTTP-запросы, поэтому ваши тесты выполняются быстро и работают в автономном режиме, но также могут быть изменены для повторного выполнения исходного запроса, чтобы проверить, работает ли тест с удаленным API.

https://github.com/myronmarston/vcr

Другие вопросы по тегам