Заглушка для клиента Feign для интеграционного тестирования

У меня есть весенний облачный проект со следующей структурой упаковки

Контроллер (опубликует конечную точку отдыха) -> поток (бизнес-логика) -> сервис (вызывает клиент Feign с резервной настройкой hysterix) -> клиент Feign.

Автоматическая проводка выполняется в соответствующих классах, например. поток автоматически подключается к контроллеру, сервис автоматически подключается к потоку и так далее.

Я хочу выполнить интеграционный тест, вызвав конечную точку, опубликованную контроллером. Проблема в том, что в данный момент у меня нет конечной точки, к которой обращается фиктивный клиент (ни оригинальная, ни пружинная облачная заглушка не доступны).

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


person alok ailawadi    schedule 23.04.2018    source источник
comment
Вы нашли решение?   -  person ddsultan    schedule 03.06.2020


Ответы (1)


Вы можете использовать поддержку Spring Cloud WireMock и настроить конечную точку вручную перед вызовом тестов. В конфигурации имитации вы можете указать вручную IP-адрес и порт. Проблема в том, что этот тест практически бесполезен, потому что как потребитель вы издеваетесь над производителем.

ОБНОВИТЬ

У вас есть клиент Feign, который будет использоваться для вызова внешнего API. Что вы можете сделать, так это использовать Spring Cloud WireMock (или просто WireMock) для настройки макета этого API. Затем вы можете научить WireMock вести себя так, как вы хотите, и утверждать, что ваш клиент работает нормально. Проблема такого подхода в том, что поскольку вы, как клиент, настраиваете инстанс WireMock, вы можете научить его вести себя так, как это не имеет ничего общего с реальным API. Например, вы заявляете, что если вы отправляете запрос на конечную точку /foo с помощью метода GET, вы должны получить в ответ «BAR». Затем вы пишете тест, в котором ваш клиент отправляет GET @ /foo и утверждаете, что BAR был возвращен правильно. Однако это не означает, что другой API действительно имеет эту конечную точку. Таким образом, этот подход может дать вам ложные срабатывания. Однако вы можете использовать WireMock, чтобы подтвердить, можете ли вы правильно реагировать на ошибочные ответы, такие как искаженный ответ и т. д.

В таких случаях, если вы действительно хотите проверить, можете ли вы правильно взаимодействовать с API, который вы не контролируете, вы можете написать тесты, которые будут вызывать этот реальный API через прокси-сервер WireMock, вы записываете этот трафик и конвертируете его в заглушки. Подробнее об этом можно посмотреть в моей презентации здесь https://www.youtube.com/watch?v=ZyHG-VOzPZg

person Marcin Grzejszczak    schedule 23.04.2018
comment
Можете ли вы уточнить это. Я немного изо всех сил пытаюсь заставить интеграционные тесты работать для моего FeignClient с Spring Boot. Спасибо! - person ddsultan; 03.06.2020
comment
Спасибо, Марчин, за обновление. Я тоже думаю, как сделать тест. Не могли бы вы порекомендовать мне ссылку, как проводить сквозное тестирование без моков для таких сценариев? - person ddsultan; 03.06.2020
comment
Вы можете прочитать документацию по контракту Spring Cloud cloud.spring.io/spring-cloud-static/spring-cloud-contract/ там все описано. Можем ли мы пометить это как ответ? - person Marcin Grzejszczak; 03.06.2020
comment
Спасибо за ссылку. Я не могу пометить это ответом, потому что опция не видна - person ddsultan; 03.06.2020