[英]SpringBoot @WebMvcTest, autowiring RestTemplateBuilder
我在测试Spring Controller时遇到了问题。 我在我的测试类中使用注释@WebMvcTest。 当我运行测试时,我收到此错误:没有'org.springframework.boot.web.client.RestTemplateBuilder'类型的限定bean
我在我的项目中使用RestTemplate用于其他类,所以我在我的主类中定义了一个bean:
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
return builder.build();
}
为了使它工作,我必须以这种方式定义我的restTemplate bean:
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
这是注释@WebMvcTest的问题还是我错过了什么?
谢谢
是的,这确实感觉像一个bug。
但是,您可以通过将@AutoConfigureWebClient
与现有的@WebMvcTest
一起添加到测试类中来轻松解决
当我编写Controller测试时,我通常更喜欢为所有协作者使用模拟。 这样可以非常轻松地验证您的bean是否使用您期望的值进行调用,而无需实际执行调用。
使用WebMvcTest,这非常容易实现,下面是给出RestTemplate Bean的示例。
@RunWith(SpringRunner.class)
@WebMvcTest(SomeController.class)
public class SomeControllerTest {
@MockBean
private RestTemplate restTemplate;
@Test
public void get_WithData() {
mockMvc.perform(get("/something")).andExpect(status().isOk());
verify(restTemplate, times(1)).getForObject("http://localhost:8080/something", SomeClass.class);
}
}
当你向@Bean定义添加任何参数时,这意味着你正在寻找一个被注入的类型为T的bean。 改变这个:
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
return builder.build();
}
至
@Bean
public RestTemplate restTemplate() {
RestTemplateBuilder builder=new RestTemplateBuilder(//pass customizers);
return builder.build();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.