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

Mockito生成含Getter的AppContext Mock时出现类型不匹配错误求助

解决Mockito生成带Getter的AppContext Mock时的空类型错误

问题场景

你的AppContext类包含一个非空返回类型的getter:

class AppContext {
...
  AppLocalizations get l10n => AppLocalizations.of(navigatorMaterialAppKey.currentContext!);
}

使用Mockito生成Mock的代码如下:

@GenerateNiceMocks([
  MockSpec<AppContext>(),
])

运行测试时触发错误:type 'Null' is not a subtype of type 'AppLocalizations',原因是Mockito默认不会为非空返回类型的getter生成有效Mock实现,调用时返回了null。

解决方案

1. 手动存根Getter的返回值

在测试代码中,为Mock实例的l10n getter指定返回的Mock对象:

// 初始化Mock实例
final mockAppContext = MockAppContext();
final mockLocalizations = MockAppLocalizations(); // 需先为AppLocalizations生成Mock

// 存根l10n getter
when(mockAppContext.l10n).thenReturn(mockLocalizations);

2. 为AppLocalizations生成对应Mock

由于l10n返回AppLocalizations类型,需要先为该类生成Mock,修改生成配置:

@GenerateNiceMocks([
  MockSpec<AppContext>(),
  MockSpec<AppLocalizations>(), // 添加该行生成AppLocalizations的Mock
])

3. 优化Mock生成配置(可选)

如果希望避免默认返回null,可以在MockSpec中禁用空返回,强制未存根的调用抛出错误,提前暴露问题:

@GenerateNiceMocks([
  MockSpec<AppContext>(
    returnNullOnMissingStub: false,
  ),
])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 22:16:03