Я использую Spring -Cloud-Netflix для связи между микросервисами. Скажем, у меня есть две службы: Foo и Bar, а Foo потребляет одну из конечных точек Bar REST. Я использую интерфейс, аннотированный с помощью @FeignClient
:
@FeignClient
public interface BarClient {
@RequestMapping(value = "/some/url", method = "POST")
void bazzle(@RequestBody BazzleRequest);
}
Тогда у меня есть класс обслуживания SomeService
в Foo, который вызывает BarClient
.
@Component
public class SomeService {
@Autowired
BarClient barClient;
public String doSomething() {
try {
barClient.bazzle(new BazzleRequest(...));
return "so bazzle my eyes dazzle";
} catch(FeignException e) {
return "Not bazzle today!";
}
}
}
Теперь, чтобы убедиться, что связь между службами работает, я хочу построить тест, который запускает настоящий HTTP-запрос на поддельный Bar-сервер, используя что-то вроде WireMock. Тест должен убедиться, что feign правильно декодирует ответ службы и сообщает об этом SomeService
.
public class SomeServiceIntegrationTest {
@Autowired SomeService someService;
@Test
public void shouldSucceed() {
stubFor(get(urlEqualTo("/some/url"))
.willReturn(aResponse()
.withStatus(204);
String result = someService.doSomething();
assertThat(result, is("so bazzle my eyes dazzle"));
}
@Test
public void shouldFail() {
stubFor(get(urlEqualTo("/some/url"))
.willReturn(aResponse()
.withStatus(404);
String result = someService.doSomething();
assertThat(result, is("Not bazzle today!"));
}
}
Как я могу вставить такой сервер WireMock в eureka, чтобы feign смог найти его и связаться с ним? Какая магия аннотаций мне нужна?