У меня есть класс, который использует клиент Feign. Раньше я использовал Mockito и дал сохраненный ответ для каждого вызова метода в клиенте Feign. Теперь я хочу использовать WireMock, чтобы я мог видеть, что мой код правильно обрабатывает разные коды ответов. Как мне это сделать? Я не могу понять, как подключить мой клиент Feign в тесте и подключить его, чтобы он использовал Wiremock вместо URL-адреса, который я установил в моем файле application.yml
. Любые указатели будут очень благодарны.Как использовать WireMock на клиенте Feign в приложении Spring Boot?
7
A
ответ
3
Может быть, вы хотите посмотреть на этот проект https://github.com/ePages-de/restdocs-wiremock
Это поможет вам создавать и публиковать wiremock фрагменты в своих весенних тестах Mvc (с помощью пружинного покоя документы).
И наконец, вы можете использовать эти фрагменты, чтобы запустить сервер проводной связи для обслуживания этих записанных запросов в вашем тесте.
Если вы уклонились от этого интегрированного решения, вы могли бы просто использовать правило JUnit wiremock, чтобы запустить ваш сервер для подключения к сети во время теста. http://wiremock.org/docs/junit-rule/
Вот тестовый образец, который использует динамический порт wiremock и конфигурирует ленту, чтобы использовать этот порт: (вы используете симулировать и ленточку?)
@WebAppConfiguration
@RunWith(SpringRunner.class)
@SpringBootTest()
@ActiveProfiles({"test","wiremock"})
public class ServiceClientIntegrationTest {
@Autowired //this is the FeignClient service interface
public ServiceClient serviceClient;
@ClassRule
public static WireMockRule WIREMOCK = new WireMockRule(
wireMockConfig().fileSource(new ClasspathFileSource("path/to/wiremock/snipptes")).dynamicPort());
@Test
public void createSome() {
ServiceClient.Some t = serviceClient.someOperation(new Some("some"));
assertTrue(t.getId() > 0);
}
//using dynamic ports requires to configure the ribbon server list accordingly
@Profile("wiremock")
@Configuration
public static class TestConfiguration {
@Bean
public ServerList<Server> ribbonServerList() {
return new StaticServerList<>(new Server("localhost", WIREMOCK.port()));
}
}
}
Спасибо за ответы! Я не использую ленту - только симулирую. Я использую '@ FeignClient' с' url = externalApiUrl'. Как я могу вместо этого ввести вместо этого URL-адрес проводника? – L42
wiremock фактически запускает сервер, поэтому просто убедитесь, что FeignClient указывает на «localhost: WIREMOCK.port». Я не уверен, что URL-адрес может указывать на свойство конфигурации. Кажется, он не поддерживает весенние выражения. В аналогичном вопросе, чтобы иметь динамический симулирующий url, принятый ответ предлагает использовать ленту и механизм конфигурации, как используется вышеприведенным тестом. http://stackoverflow.com/a/29278126/5371736 –
После долгих боев с весенними версиями, я думаю, что я ближе. Однако мой autwired feign клиент получает значение «null». Вы знаете, почему это может быть? Мой текущий план состоит в том, чтобы попытаться установить URL-адрес wiremock как свойство в @SpringBootTest, так что клиент feign (если не null) перейдет к wiremock. – L42