#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 не может быть расширен во времени. Вот почему у него есть фиксированный порт.