Чтобы ответить на ваш вопрос, нет ограничений, которые вы опубликовали, нет возможности издеваться над RestTemplate и модульным тестом.
Я думаю, что вы можете немного изменить устаревший код, потому что это изменение не работает, и в этом случае оно того стоит. Но я буду придерживаться вас, что вы не можете.
Что касается мощности mock и power mockito. Хотя я согласен с тем, что этих инструментов следует избегать, но не по той причине, которую вы опубликовали. Обратите внимание, что эта зависимость относится к сфере тестирования, она в любом случае не достигнет рабочей среды даже для устаревших сред. Итак, если приоритет состоит в том, чтобы не изменять устаревший код, то внедрение PowerMock — это «наименьшее зло».
Однако, если мы говорим конкретно о шаблоне rest, вы можете воспользоваться некоторыми фактами о шаблоне spring rest, которые в любом случае можно использовать для его тестирования.
Вариант 1
Первый метод (если позволяет среда) использует аннотацию @RestClientTest
. Это позволит указать тестируемую службу и предоставит фиктивную реализацию чего-то под названием MockRestServiceServer
, которое будет представлять сервер, к которому вы пытаетесь подключиться в фиктивной среде. Затем вы сможете указать ожидания от этого сервера, и, надеюсь, код будет работать. Внимание: это не модульный тест — это интеграционный тест, который запускает контекст Spring, поэтому он будет намного тяжелее/медленнее, чем обычный модульный тест.
Здесь вы можете найти рабочий пример этого подхода, ознакомьтесь с этой статьей. содержит и другие техники.
Вариант 2
Идея, лежащая в основе второго метода, заключается в том, что RestTemplate
на самом деле является оболочкой над клиентскими библиотеками, она сама по себе не осуществляет HTTP-взаимодействия.
Его можно настроить для работы с HttpClient apache, OkHttpClient, по умолчанию он работает с URLConnection, открывающим соединение для каждого запроса. Таким образом, вы можете создать тест, который настроит оставшийся клиент для работы с каким-то конкретным движком, который вас интересует/по вашему выбору, а затем проверить, как тестировать код, который использует этот движок напрямую. Решения будут разными в зависимости от фактического движка, используемого в проекте.
person
Mark Bramnik
schedule
27.11.2019
restTemplate
. Предметный код тесно связан с проблемами реализации, что затрудняет его изолированное тестирование без внешних зависимостей/инструментов. - person Nkosi   schedule 27.11.2019