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
相关产品推荐
相关产品推荐

