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

如何Mock无Getter的restFb Connection<AdsInsights>对象?

解决restFb Connection Mock时的空指针问题

你遇到的空指针异常,核心原因是直接遍历Connection对象时,Mockito生成的默认Mock对象未正确实现iterator()方法。仅MockgetData()不足以支持增强for循环或迭代器遍历,需补充Mock迭代相关方法。

正确的Mock步骤

1. 准备测试数据

先构造模拟的AdsInsights列表:

import java.util.Arrays;
import java.util.List;
import com.restfb.types.ads.AdsInsights;

List<AdsInsights> mockInsightsList = Arrays.asList(
    new AdsInsights(), // 可根据测试需求设置具体字段值
    new AdsInsights()
);

2. Mock Connection对象

需同时MockgetData()和iterator()方法,确保遍历行为正常:

import com.restfb.Connection;
import org.mockito.Mockito;

Connection<AdsInsights> mockConnection = Mockito.mock(Connection.class);

// Mock getData() 返回测试列表
Mockito.when(mockConnection.getData()).thenReturn(mockInsightsList);

// Mock 迭代器,支持直接遍历Connection对象
Mockito.when(mockConnection.iterator()).thenReturn(mockInsightsList.iterator());

// 若业务代码涉及分页逻辑,按需补充Mock分页方法
Mockito.when(mockConnection.hasNextPage()).thenReturn(false);
Mockito.when(mockConnection.nextPage()).thenReturn(null);

3. Mock FacebookClient的fetchConnection方法

将Mock好的Connection对象作为fetchConnection的返回值:

import com.restfb.FacebookClient;

FacebookClient mockFbClient = Mockito.mock(FacebookClient.class);

// 根据实际调用参数调整匹配规则,示例为任意字符串、指定AdsInsights类、任意参数Map
Mockito.when(mockFbClient.fetchConnection(
    Mockito.anyString(),
    Mockito.eq(AdsInsights.class),
    Mockito.anyMap()
)).thenReturn(mockConnection);

关键说明

  • 如果业务代码是通过connection.getData()获取列表再遍历,仅MockgetData()即可;但如果是直接遍历Connection对象(如for (AdsInsights insight : connection)),必须Mockiterator()方法。
  • 若业务逻辑需要处理分页,务必MockhasNextPage()和nextPage(),避免分页流程中出现空指针。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 01:17:08