为了账号安全,请及时绑定邮箱和手机立即绑定

测试 RestTemplate 拦截器

测试 RestTemplate 拦截器

慕的地8271018 2021-11-17 17:26:46
我已经为RestTemplate(RestTemplateInterceptor.class)实现了一个拦截器:@Autowiredprivate RestConfigurations configurations;@Beanpublic RestTemplate restTemplate(RestTemplateBuilder builder) {    return builder.additionalInterceptors((ClientHttpRequestInterceptor) (httpRequest, bytes, clientHttpRequestExecution) -> {        HttpHeaders headers = httpRequest.getHeaders();        headers.add("X-API-KEY", configurations.getApiKey());        return clientHttpRequestExecution.execute(httpRequest,bytes);    }).build();}现在我想测试一下。:) 一次尝试看起来像这样:@ExtendWith(SpringExtension.class)@RestClientTest({RestTemplateInterceptor.class, RestConfigurations.class})@AutoConfigureMockMvc@SpringBootTestclass MyTestClass {public static final String URL = "http://testMe.com/";@AutowiredMockRestServiceServer mockServer;@AutowiredRestTemplateBuilder restTemplateBuilder;@Test@DisplayName("Should include header X-API-KEY")void headerShouldContainsXApiKey() throws Exception {    mockServer.expect(requestTo(URL)).andRespond(withSuccess("Hello world", TEXT_PLAIN));    String body = restTemplateBuilder.build().exchange(URL//            , GET, //            null,  //            String.class).getBody();    assertThat(body).isEqualTo("Hello world");    mockServer.expect(header("X-API-KEY", ""));}但我失败了:java.lang.AssertionError: 预期没有进一步的请求:HTTP GET http://test.hornbach.de/ 0 个请求已执行。任何人的提示?谢谢
查看完整描述

1 回答

?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

如果您查看Javadoc,您会看到当您调用 时additionalInterceptors,您并没有修改现有的构建器实例,而是获得了一个配置略有不同的新构建器。当您然后调用restTemplateBuilder.build()您的测试用例时,您正在构建一个具有未修改配置的模板。

测试此类事情的理想方法是直接在拦截器实例本身上执行此操作,但是如果您想通过调用模拟服务器来执行功能测试,则应该将已完成的RestTemplate实例注入到您的测试用例中。


查看完整回答
反对 回复 2021-11-17
  • 1 回答
  • 0 关注
  • 215 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信