You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

测试代码使用restTemplate与JpaRepository时出现NullPointerException

SpringBoot集成测试NullPointerException排查方案

触发原因

依赖注入失效(占90%以上场景)

  • PostsRepository未被Spring上下文识别:类未添加@Repository注解、未继承Spring Data提供的Repository接口,或者类路径不在启动类的默认扫描范围内,无法注册为Spring Bean,最终@Autowired注入结果为null
  • Spring上下文加载不完整:@SpringBootTest默认会加载同包路径下的启动类,如果测试类与项目启动类不在同一包层级,且未手动指定启动类,会导致部分Bean未被加载,TestRestTemplate和PostsRepository都可能注入失败
  • TestRestTemplate自动装配异常:低版本SpringBoot未默认开启TestRestTemplate的自动装配,或者项目配置文件中缺失spring-boot-starter-test核心测试依赖,也会导致注入为空

业务变量未初始化

  • 代码省略部分的url、requestDto变量未完成赋值直接使用,调用postForEntity方法时传入null参数触发空指针

解决方法

  • 先验证注入状态,在测试类中增加前置校验逻辑,确认Bean是否注入成功:
@BeforeEach
void checkBeanInject() {
    // 两个对象都不为空才会执行测试逻辑
    org.springframework.util.Assert.notNull(restTemplate, "TestRestTemplate注入失败");
    org.springframework.util.Assert.notNull(postsRepository, "PostsRepository注入失败");
}
  • 如果是Bean注入失败,给@SpringBootTest注解手动指定项目启动类,强制加载完整上下文:
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = 你的项目启动类名.class)
  • 检查PostsRepository配置:确认类上加了@Repository注解,且继承了JpaRepository/CrudRepository等Spring Data封装的Repository接口
  • 检查pom.xml/gradle.build依赖配置,确认引入了完整的测试依赖:
<!-- Maven配置示例 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>
  • 检查代码省略部分的url、requestDto变量,确认调用postForEntity前已经完成初始化赋值,不存在null的情况
  • 高版本SpringBoot可以删除@ExtendWith(SpringExtension.class)注解,@SpringBootTest已经默认集成了该扩展能力,避免版本适配问题

内容的提问来源于stack exchange,提问作者Noeyso

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 14:09:03