Поддельные вызовы REST API с профилями SpringBoot - PullRequest
0 голосов
/ 06 февраля 2020

Я недавно начал со Spring и не уверен, как решить эту проблему. У меня есть загрузочная программа Spring, которая делает вызовы удаленных API REST. Например, класс AddressService с методом getAddress(String user), который выполняет HTTP-вызов и возвращает ответ JSON. Я хотел бы настроить профили Spring для целей разработки local, dev, uat, prod.

Когда программа работает с профилем local, я бы хотел " Подшучивать над этими внешними вызовами API с ожидаемым ответом JSON, поэтому я могу просто проверить logi c, но когда он запускается в любом из других профилей, я хотел бы сделать реальные вызовы. Как я могу go сделать это? Из того, что я прочитал, есть много способов, которыми люди подходят к этому, используя WireMock, RestTemplate, Mockito et c. Я не понимаю, какой путь к go.

Любой совет будет принята с благодарностью. Спасибо.

Ответы [ 2 ]

0 голосов
/ 06 февраля 2020

Что вы можете сделать, это использовать разные application.properties файлы в зависимости от вашего профиля. Таким образом, вы просто измените URL на фиктивный сервер для своего профиля local.

Итак, что вам нужно сделать:

  1. Создайте еще одно application.properties в вашей папке resources с именем: application-local.properties.
  2. Изменить URL желаемой услуги.
  3. Запустите приложение с помощью опции VM -Dspring.profiles.active=local.

Вот ссылка , которая хорошо описывает, чего вы хотите достичь.

Для вашего фиктивного сервера вы можете использовать Wiremock , Mountebank , Почтальон , ..., который можно запускать отдельно и указывать макет c конечных точек для возврата что хочешь.

0 голосов
/ 06 февраля 2020

WireMock, Mockit для unittest, чтобы высмеивать реальный запрос. Пример здесь: Как смоделировать обмен шаблонами REST?

Когда вам нужна работающая реализация с макетом, я думаю, что самый простой способ - использовать интерфейс

public interface AdressAdapter {
    public List<Adress> getAddress(String name);
}

И две разные реализации в зависимости от профиля.

@Profile("local")
public class DummyAdress implements AdressAdapter{
    @Override
    public List<Adress> getAddress(String name) {
        //Mock here something
        return null;
    }
}

! в данном случае означает НЕ локаль профиль.

@Profile("!local")
public class RealAdress implements AdressAdapter{
    @Override
    public List<Adress> getAddress(String name) {
        //Make Restcall
        return null;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...