繁体   English   中英

SpringBoot @WebMvcTest,自动装配RestTemplateBuilder

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM