Java: имитирование вызовов http/https в модульном тесте

Я пытаюсь настроить модульные тесты в своем коде, в котором я хотел бы издеваться над остальными вызовами, идущими к внешней веб-службе. Я знаю пару способов сделать это:

  1. Заглушите методы, которые выполняют вызов внешней веб-службы с помощью PowerMock, чтобы возвращать фиктивные объекты ответа.

  2. Для модульных тестов измените адрес узла веб-службы, чтобы он указывал на локальный хост, а затем используйте WireMock для подключения к локальному хосту и отправки ответов.

Что я хочу сделать, так это не менять адрес хоста в (2) и позволить WireMock (или любой другой сторонней библиотеке) перехватывать вызов к данному хосту и на основе вызова отправлять ответ.

Другими словами, я хотел бы настроить WireMock таким образом, чтобы, если мой код вызывает, например, http://www.google.com, то WireMock перехватит этот вызов и ответит тем, что я настрою. (В основном заглушка www.google.com).


person user1855193    schedule 04.08.2014    source источник


Ответы (1)


К сожалению, WireMock не может этого сделать.

У вас есть три варианта (которые я могу придумать):

  1. Используйте BetaMax, который настраивается как прокси-сервер для HTTP-клиентов Java, или
  2. Измените файл hosts, чтобы указать, например. www.google.com на 127.0.0.1
  3. Если вы используете HTTP-клиент Apache 4.2+, вы можете реализовать собственный DnsResolver, чтобы привязать используемое имя хоста к 127.0.0.1.
person Tom    schedule 05.08.2014
comment
Спасибо, Том, позвольте мне попробовать и вернуться к этой теме :) - person user1855193; 06.08.2014
comment
спасибо за подсказку, Том, у меня это работает, используя метод 3. - person Martin Charlesworth; 29.01.2015
comment
Том, есть ли способ перенаправить на порт, чтобы запрос на порт 80 направлялся на порт wiremock? - person Martin Charlesworth; 29.01.2015
comment
Вы можете запустить WireMock на порту 80, используя параметр --port CLI (вам потребуется sudo, если вы работаете в ОС в стиле Unix). - person Tom; 31.01.2015
comment
В качестве альтернативы, если вы используете Linux, вы можете использовать IPTables для переадресации порта, что является хорошим вариантом, если вы не хотите запускать WireMock от имени пользователя root. - person Tom; 31.01.2015