@FeignClient
注解的接口:@FeignClient
public interface BarClient {
@RequestMapping(value = "/some/url", method = "POST")
void bazzle(@RequestBody BazzleRequest);
}
然后我在Foo中有一个服务类SomeService
,它调用了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!";
}
}
}
现在,为了确保服务之间的通信正常工作,我想构建一个测试,对一个“假”的 Bar 服务器发送真实的 HTTP 请求,使用 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 能够找到它并与之通信?
BarClient
逻辑。如果这样做,那么您的测试将是单元测试,而不是集成测试。如果这是一个单元测试,那么您可以使用Mokito简单地模拟BarClient
,而不需要进行任何http请求。我不明白为什么您需要http请求? - Sergey BespalovFooService
中所有技术层的集成,而不是只测试一个类并用模拟或存根替换其他部分的单元测试。 - Bastian VoigtMockRestServiceServer
吗? - Tim