我有一个类,它使用RestTemplate构建多个RestTemplateBuilder。
private RestTemplate build(RestTemplateBuilder restTemplateBuilder) {
return restTemplateBuilder
.rootUri("http://localhost:8080/rest")
.build();
}对于我的测试设置,我使用@AutoConfigureMockRestServiceServer和使用MockServerRestTemplateCustomizer的模拟响应
mockServerRestTemplateCustomizer.getServer()
.expect(ExpectedCount.times(2),
requestToUriTemplate("/some/path/{withParameters}", "withParameters"))
.andRespond(withSuccess());当我取消pom中的spring-boot-actuator依赖项注释时,我的测试就通过了,而在另一个场景中,我的测试失败了,并收到了以下消息。
预期:/偏/路径/参数 实际:http://localhost:8080/rest/pos/some/path/withParameters
通过MockServerRestTemplateCustomizer调试,我注意到spring-boot-actuator应用了一个"DelegateHttpClientInterceptor“来支持rest模板的内置度量。但是,这给我在RootUriRequestExpectationManager中找到的以下代码带来了问题
public static RequestExpectationManager forRestTemplate(RestTemplate restTemplate,
RequestExpectationManager expectationManager) {
Assert.notNull(restTemplate, "RestTemplate must not be null");
UriTemplateHandler templateHandler = restTemplate.getUriTemplateHandler();
if (templateHandler instanceof RootUriTemplateHandler) {
return new RootUriRequestExpectationManager(((RootUriTemplateHandler) templateHandler).getRootUri(),
expectationManager);
}
return expectationManager;
}因为如上所述,spring-boot-actuator注册了一个"DelegateHttpClientInterceptor“,这导致上面的代码不识别RootUriTemplateHandler,因此不匹配使用requestToUriTemplate的请求。
我在这里错过了什么才能让它发挥作用?
发布于 2021-03-19 08:15:58
正如安迪·威尔金森所指出的,这似乎是Spring中的一个bug。I 创建一个示例项目的问题。
https://stackoverflow.com/questions/66675861
复制相似问题