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

