Попытка @Autowired RestTemplate в Spring Boot 2.1.4 с использованием RestTemplateBuilder. Когда я запускаю тесты junit, я получаю сообщение об ошибке при попытке автоматического подключения RestTemplate.
Я видел здесь: Как автоматически связать RestTemplate с помощью аннотаций Кажется, что RestTemplateBuilder лучше, поэтому я хотел бы использовать его.
Это файл конфигурации:
@Configuration
public class Beans {
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
return builder.build();
}
}
Это тестовый класс:
@RunWith(SpringRunner.class)
@SpringBootTest
@ContextConfiguration(classes = Beans.class)
public class AppTest extends TestCase {
@Autowired
private RestTemplate restTemplate;
}
Ошибка:
APPLICATION FAILED TO START
***************************
Description:
Parameter 0 of method restTemplate in beanDeclerations.Beans required a bean of type 'org.springframework.boot.web.client.RestTemplateBuilder' that could not be found.
The injection point has the following annotations:
- @org.springframework.beans.factory.annotation.Autowired(required=true)
Action:
Consider defining a bean of type 'org.springframework.boot.web.client.RestTemplateBuilder' in your configuration.
Я отредактировал другие автомонтажные работы. Что мне здесь не хватает? После поиска в Интернете я обнаружил, что Spring автоматически подключил RestTemplateBuilder, почему здесь этого нет?
Обновлено: В итоге я использовал @RestClientTest(), и на данный момент мне пришлось переместить RestTemplateBuilder Bean в основной класс, позже я перенесу его в другое место. Спасибо за помощь.
Привет, я думаю, что RestTemplateBuilder не настроен в вашем приложении. Вы можете проверить baeldung.com/spring-rest-template-builder по этой ссылке, чтобы узнать, как настроить RestTemplate с помощью RestTemplateBuilder. Надеюсь, поможет.




RestTemplateBuilder должен быть доступен через автоконфигурацию (см.: https://github.com/spring-projects/spring-boot/blob/master/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/client/ RestTemplateAutoConfiguration.java). Я думаю, что эта конфигурация отсутствует из-за вашего @ContextConfiguration. У вас есть некоторые возможности. Попробуйте добавить AutoConfig для RestTemplateBuilder в свой ContextConfiguration. Второй — сделать TestConfiguration и создать свой собственный RestTemplateBuilder или непосредственно RestTemplate. Третий - не внедряйте RestTemplate - создайте его вручную в своем тесте. Вы также можете удалить аннотацию @ContextConfiguration-Annotation, но это приведет к тесту, который загружает каждую конфигурацию, которую вы определили в своем проекте.
Также существует RestTestTemplate (https://www.baeldung.com/spring-boot-testresttemplate), предназначенный для тестов.
@RunWith(SpringRunner.class)
@SpringBootTest
@ContextConfiguration(classes = {TestConfig.class, RestTemplateAutoConfiguration.class})
public class SandboxApplicationTests {
@Autowired
RestTemplate restTemplate;
@Test
public void contextLoads() {
}
}
Фрагмент выше работает для меня. Без RestTemplateAutoConfiguration в ContextConfiguration RestTemplate не может быть создан из-за отсутствия RestTemplateBuilder-Bean
У меня была такая же проблема (в приложении Spring Boot 2.5.5).
Чтобы решить эту проблему, мне пришлось добавить @AutoConfigureWebClient в свой тестовый класс.
Итак, мой тест выглядит так:
@AutoConfigureWebClient
@WebMvcTest(controllers = TeamController.class)
public class TeamControllerTest {
@Autowired
private MockMvc mockMvc;
@MockBean
private FooService fooService;
@Test
public void findAllFoos() throws Exception {
mockMvc.perform(get("/foos"))
.andExpect(status().isOk());
}
}
Но я где-то читал, что это может рассматриваться как ошибка, которую должна исправить Spring Team (может быть, эта аннотация будет напрямую добавлена в @WebMvcTest?).
Я думаю так: тест запускается и останавливается быстрее, чем когда вы используете @SpringBootTest (потому что последний полностью запускает ваше приложение).
Для получения дополнительной информации: https://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/test/autoconfigure/web/client/AutoConfigureWebClient.html