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

编写指定业务方法的JUnit测试时遇空指针异常,如何解决?

问题排查与解决

业务方法代码

public List<PartGEntity> getBEntityId(List<GBEntityDTO> gBEntities, BigInteger partId) {
    List<PartGEntity> partGEntityList = new ArrayList<>();
    if(!CollectionUtils.isEmpty(gBEntities)) {
        gBEntities.forEach(gBEntityDTO -> {
            PartGEntity partGEntity = createPartGEntity(
                    statClient.getBEntityByAnetId(gBEntityDTO.getAnetId()));
            partGEntity.setPartyId(partyId); // 注意:此处参数为partId,但代码写为partyId,疑似笔误
            partGEntityList.add(partGEntity);
        });
    }
    return partGEntityList;
}

测试代码片段

BEntityDTO bEntityByAnetId = new BEntityDTO();
bEntityByAnetId.setAnetId("5738");
bEntityByAnetId.setEffectiveDate(new Date());
when(statClient.getBEntityByAnetId("5738")).thenReturn(bEntityByAnetId);    
when(partGEntityDS.getBEntityId(newBEntityList,partId)).thenReturn(partGEntityList);

空指针异常排查方向

1. 验证statClient的Mock是否正确注入

若statClient未正确注入到被测业务类实例中,调用statClient.getBEntityByAnetId()会直接触发空指针:

  • 确保测试类中用@Mock声明statClient,用@InjectMocks注入到业务类实例,或手动设置:
    @Mock
    private StatClient statClient;
    
    @InjectMocks
    private YourBusinessService businessService; // 替换为你的业务类名称
    
  • JUnit4需在测试方法开头初始化Mock:MockitoAnnotations.openMocks(this);JUnit5需添加@ExtendWith(MockitoExtension.class)注解。

2. 检查Mock的参数匹配是否命中

如果gBEntityDTO.getAnetId()返回的字符串与Mock的"5738"不匹配,Mock会返回null,导致createPartGEntity处理空值时抛出异常:

  • 先改用任意字符串匹配验证:
    when(statClient.getBEntityByAnetId(anyString())).thenReturn(bEntityByAnetId);
    
    若异常消失,说明参数值不匹配,检查newBEntityList中GBEntityDTO的anetId是否确实为"5738"。

3. 排查createPartGEntity方法的空值处理

若statClient.getBEntityByAnetId()返回null(Mock未命中或主动返回null),且createPartGEntity未做入参空校验,直接调用入参方法会触发空指针:

  • 暂时让Mock返回非空值,或给createPartGEntity添加空值校验;若该方法是测试目标,需确保其能正确处理空入参,或在业务逻辑中先判断返回值是否为null再调用。

4. 修正业务方法中的笔误

业务方法里partGEntity.setPartyId(partyId)存在参数名错误:方法参数为partId,但代码写为partyId。若partyId是未初始化的类成员变量,后续操作可能触发异常,建议修正为partId。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 04:46:13