Я использую Spring-Cloud-Netflix для связи между микросервисами. Допустим, у меня есть две службы, Foo и Bar, а Foo использует одну из конечных точек REST Bar. Я использую интерфейс, помеченный @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, чтобы fign смог найти его и связаться с ним? Какая магия аннотаций мне нужна?
BarClient
логику. если вы это сделаете, то ваш тест будет модульным, а не интеграционным. А если это модульный тест, то вы можетеBarClient
просто имитировать с Mokito, вообще без HTTP-запросов. Я не понимаю, зачем вам http-запрос? - person Sergey Bespalov   schedule 22.09.2016FooService
, в отличие от модульных тестов, которые тестируют только один класс и заменяют остальные на макеты или заглушки. - person Bastian Voigt   schedule 22.09.2016MockRestServiceServer
в Spring Boot 1.4? - person Tim   schedule 27.09.2016