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

Java Spring中@InjectMocks在服务测试用例中返回null的解决方法

解决StudentCourseRequestService测试中的NullPointerException问题

问题原因

测试类使用了@MockBean注解,但未启用Mockito的注解处理机制,导致courseRequestRepository这个Mock对象没有被正确创建并注入到studentCourseRequestService中,调用方法时触发空指针异常。

修复步骤

1. 调整注解并添加Mockito扩展支持

  • 将@MockBean替换为Mockito原生的@Mock注解:@MockBean是Spring Boot用于集成测试时替换容器内Bean的注解,而单元测试无需加载Spring上下文,使用@Mock即可创建Mock对象。
  • 在测试类上添加@ExtendWith(MockitoExtension.class):让JUnit 5能够识别并初始化Mockito的注解对象,完成依赖注入。

2. 确认依赖完整性

如果使用Maven,确保pom.xml中包含Mockito的JUnit 5依赖:

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-junit-jupiter</artifactId>
    <version>4.5.1</version> <!-- 可替换为最新稳定版本 -->
    <scope>test</scope>
</dependency>

修改后的测试类代码

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.when;
import model.CourseRequest;
import repository.ICourseRequestRepository;

@ExtendWith(MockitoExtension.class)
public class StudentCourseRequestServiceTests {
    @Mock
    private ICourseRequestRepository courseRequestRepository;

    @InjectMocks
    private StudentCourseRequestService studentCourseRequestService;

    @Test
    public void requestValidCourse() throws Exception {
        final CourseRequest courseRequest = new CourseRequest(
            "data0",
            "data1",
            "data2",
            "data3",
            "data4",
            "data5"
        );

        when(courseRequestRepository.saveRequest(courseRequest)).thenReturn(true);
        boolean result = studentCourseRequestService.requestCourse(courseRequest);
        assertThat(result).isTrue();
    }
}

额外说明

  • @InjectMocks会自动将标注@Mock的对象注入到被测试类的对应字段中,这里就是把courseRequestRepository注入到studentCourseRequestService实例里。
  • 若必须使用@MockBean(如需要加载部分Spring上下文的集成测试场景),需给测试类添加@SpringBootTest注解,但该方式会减慢测试执行速度,单元测试不推荐。

内容的提问来源于stack exchange,提问作者Yağız Can Aslan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 06:30:59