一.异常原因
-
组件获取失败(NoSuchBeanDefinitionException):
① 组件未加注解;② 组件不在扫描包范围内;③ 组件名称 / 类型写错;

二.TestRestTemplate在未配置Web环境的时候,自动装配会报错
2.0.核心原因
TestRestTemplate 只有在真实的 Web 环境下才会被 Spring 测试上下文自动创建。
2.1. 为什么不配置 webEnvironment 会报错?
- Spring Boot 测试默认的
webEnvironment是WebEnvironment.MOCK,它只是模拟了一个 Servlet 环境,并没有启动一个真实的 Web 服务器(Tomcat)。 - 在这种模拟环境下,Spring 测试上下文不会自动提供
TestRestTemplate这个 Bean,因为它是用来和真实服务器交互的。 - 当你尝试用
@Autowired注入一个不存在的 Bean 时,就会抛出NoSuchBeanDefinitionException。
2.2. 配置 RANDOM_PORT 或 DEFINED_PORT 为什么就不报错了?
当你显式设置:
java
运行
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
- Spring Boot 会启动一个真实的、内嵌的 Web 服务器(Tomcat),并监听一个随机端口。
- 此时,测试上下文检测到真实的 Web 环境,就会自动创建并配置好
TestRestTemplate实例,并且它已经知道服务器的端口,你可以直接使用相对路径(如/api/user)来发送请求。
