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

使用Mockito、JUnit5和Spring Boot做服务层单元测试报NullPointerException如何解决

问题原因排查&解决方法

1. 缺少Mockito注解激活配置

JUnit 5环境下使用@Mock、@InjectMocks注解时,必须在测试类上添加@ExtendWith(MockitoExtension.class)注解激活Mockito注解处理逻辑,否则所有加了Mockito注解的字段都会保持为null,调用时直接触发空指针。
修改后的测试类头示例:

@ExtendWith(MockitoExtension.class)
class UserServiceTest {
    // 原有字段和方法
}

2. @InjectMocks不能直接作用于接口

IUserService是服务层接口,Mockito无法直接实例化接口完成依赖注入,你需要把注入目标改成对应的实现类,比如:

@InjectMocks
UserService userService; // 替换为你的IUserService实现类类名

3. 未Mock/注入UserMapper依赖

如果你的UserService实现类中依赖了UserMapper做对象转换,那么测试类中的UserMapper字段也需要添加@Mock或者@Spy注解,否则注入到Service中的UserMapper会是null,在createUser方法内调用转换逻辑时会抛出空指针。

4. 依赖缺失检查

如果加了@ExtendWith(MockitoExtension.class)后依然报错,确认你是否引入了JUnit 5对应的Mockito适配依赖:
Maven配置示例:

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-junit-jupiter</artifactId>
    <scope>test</scope>
</dependency>

Gradle配置示例:

testImplementation 'org.mockito:mockito-junit-jupiter'

额外注意

你当前mock userRepository.save时返回的是无参构造的空UserEntity,后续断言createdUser.getFirstName()和入参相等会失败,你需要构造一个带对应字段值的UserEntity作为返回值,或者用spy走真实处理逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 08:39:03