Test RestTemplate Interceptors - PullRequest
       7

Test RestTemplate Interceptors

0 голосов
/ 15 октября 2018

Я реализовал Перехватчики для RestTemplate (RestTemplateInterceptor.class):

@Autowired
private RestConfigurations configurations;

@Bean
public 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
@SpringBootTest
class MyTestClass {
public static final String URL = "http://testMe.com/";

@Autowired
MockRestServiceServer mockServer;

@Autowired
RestTemplateBuilder 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 Ответ

0 голосов
/ 15 октября 2018

Если вы отметите Javadoc , вы увидите, что когда вы вызываете additionalInterceptors, вы не изменяете существующий экземпляр компоновщика, а вместо этого получаете нового компоновщика с немного другой конфигурацией.Затем, когда вы вызываете restTemplateBuilder.build() в своем тестовом примере, вы создаете шаблон с неизмененной конфигурацией.

Идеальный способ проверить что-то подобное - это сделать это непосредственно на самом экземпляре перехватчика, ноесли вы хотите выполнить функциональный тест, позвонив на фиктивный сервер, вы должны внедрить завершенный экземпляр RestTemplate в ваш тестовый пример.

...