我在测试Spring Controller时遇到了问题。 我在我的测试类中使用了注释@WebMvcTest。 当我运行测试时,我收到此错误: 没有符合条件的bean' org.springframework.boot.web.client.RestTemplateBuilder'可用
我在我的项目中使用RestTemplate用于其他类,所以我在主类中定义了一个bean:
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
return builder.build();
}
为了使它工作,我必须以这种方式定义我的restTemplate bean:
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
注释@WebMvcTest是问题还是我错过了什么?
由于
答案 0 :(得分:12)
是的,这确实感觉像是一个错误
但是,您可以通过将@AutoConfigureWebClient
与现有@WebMvcTest
答案 1 :(得分:2)
当你向@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();
}
答案 2 :(得分:2)
当我编写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);
}
}