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

SpringBoot3.1.1中Mockito测试PdfService遇空指针异常求助

解决PdfService测试空指针异常问题

问题根源

你的PdfService通过构造函数依赖AsAPIService,但测试类中没有为这个依赖提供Mock实例。Mockito的@InjectMocks需要对应的依赖Mock才能完成目标类的实例化,否则无法创建PdfService对象,导致调用generatePdf()时出现空指针。

修复方案

给测试类中的AsAPIService添加@Mock注解,让Mockito生成该依赖的Mock对象,再通过@InjectMocks注入到PdfService中:

修复后的测试类(MockitoExtension版)

@ExtendWith(MockitoExtension.class)
class PdfServiceTest {

    @Mock
    private AsAPIService asAPIService; // 为依赖创建Mock实例

    @InjectMocks
    private PdfService pdfService; // Mockito会将asAPIService注入到pdfService中

    @Test
    void generatePdf() throws UnirestException {
        pdfService.generatePdf();
        
        // 可选:验证asAPIService的chart方法是否被正确调用
        ArgumentCaptor<AsRequestBody> captor = ArgumentCaptor.forClass(AsRequestBody.class);
        verify(asAPIService).chart(captor.capture());
        AsRequestBody requestBody = captor.getValue();
        assertEquals("6248i23", requestBody.getAuthKey());
        assertEquals("8f1adbf3deaefa8d6a4c05", requestBody.getAuthPwd());
    }
}

修复后的测试类(MockitoJUnitRunner版)

@RunWith(MockitoJUnitRunner.class)
class PdfServiceTest {

    @Mock
    private AsAPIService asAPIService;

    @InjectMocks
    private PdfService pdfService;

    @Test
    void generatePdf() throws UnirestException {
        pdfService.generatePdf();
        
        // 可选验证逻辑
        verify(asAPIService).chart(any(AsRequestBody.class));
    }
}

关键说明

  • @Mock:告诉Mockito创建指定类的Mock实例,用于替代真实的依赖对象。
  • @InjectMocks:Mockito会自动将标注了@Mock或@Spy的对象,通过构造函数、Setter或字段注入的方式,注入到被标注的目标类实例中。
  • 可选的验证逻辑:确保AsAPIService的chart方法被调用,且传入的参数符合预期,让测试更严谨。

内容的提问来源于stack exchange,提问作者Nunyet Calçada

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 06:01:09