亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

測試 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 關注
  • 262 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號