Spring Cloud OpenFeign — Как я могу создать тестовый срез?

#java #spring #spring-boot #spring-cloud-feign #feign

Вопрос:

У меня есть тест для притворного клиента, и я хотел бы настроить тестовый срез, например @WebMvcTest @DataJpaTest , и т. Д.

Например, в следующем тесте используется @SpringBootTest и загружается весь контекст приложения:

 @SpringBootTest
@AutoConfigureWireMock(port = 0)
class AgePredictorFeignClientTest {

    @Autowired
    private AgePredictorFeignClient agePredictorFeignClient;

    @Test
    void getAge() {
        stubFor(get(urlEqualTo("/age-api?name=Henrique"))
                .willReturn(aResponse().withBodyFile("25_years_old.json")
                        .withHeader("Content-Type", "application/json")));

        Integer age = agePredictorFeignClient.getAge("Henrique").getAge();

        assertThat(age).isEqualTo(25);

        verify(getRequestedFor(urlEqualTo("/age-api?name=Henrique")));
    }
}
 

Как я мог изменить этот тест, чтобы загружать только контекст, связанный с Spring Cloud OpenFeign?

Исходный код приложения с этим тестом доступен по адресу https://github.com/henriquels25/openfeign-tests-sample.

Ответ №1:

В настоящее время нет готового решения, чтобы иметь что-то вроде @FeignTest. Однако кто-то нашел решение для этого, которое можно найти здесь. Это решение добавляет желаемую функциональность. Также было предложено использовать spring-cloud-openfeign.

Если вы не хотите включать вышеуказанные ограничения, я создал пример, вручную импортировав некоторые классы автоконфигурации, чтобы загружать только необходимые функции. См. Здесь Описание тестируемого притворного клиента с использованием этой тестовой конфигурации

Единственным недостатком этого является то, что случайный порт wiremock не может быть расширен во времени. Вот почему у него есть фиксированный порт.