【问题标题】:Test RestTemplate Interceptors测试 RestTemplate 拦截器
【发布时间】:2018-10-15 06:33:28
【问题描述】:

我已经为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 个请求已执行。

有人提示吗?谢谢

【问题讨论】:

    标签: java spring unit-testing testing resttemplate


    【解决方案1】:

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

    测试这样的事情的理想方法是直接在拦截器实例本身上进行,但如果你想通过调用模拟服务器来执行功能测试,你应该注入完整的 RestTemplate 实例进入你的测试用例。

    【讨论】:

    • 另外他应该添加@RestClientTest到测试类。
    • @KamilW。由于他没有展示整个课程,并且错误似乎表明测试正在正确启动和执行,因此看起来已经处理好了。
    猜你喜欢
    • 2019-12-22
    • 2015-11-08
    • 1970-01-01
    • 1970-01-01
    • 2021-05-20
    • 2020-01-03
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    相关资源
    最近更新 更多