使用mockito 5.0.13时verify(mockObserver.didPush(any,any))报any类型错误如何解决
问题修复方案
问题根因
Mockito 5.x 版本适配了 Dart 空安全规范,无类型的any默认是dynamic类型,不能直接传入非空类型的参数位,因此会触发类型不合法报错。
修复方法
方法1:使用带类型声明的匹配器(推荐)
NavigatorObserver的didPush方法入参分别是非空的Route类型、可空的Route?类型,你只需要给any指定对应类型即可:
verify(mockObserver.didPush(any<Route>(), any<Route?>()));
如果你的IDE对可空参数仍有报错,可以替换为anyOrNull匹配器:
verify(mockObserver.didPush(any<Route>(), anyOrNull<Route?>()));
方法2:临时兼容旧代码(不推荐)
如果需要快速适配大量旧测试代码,可以在测试文件头部忽略相关类型校验,该方案会关闭参数类型检查,可能隐藏潜在问题,仅建议临时过渡使用:
// ignore_for_file: argument_type_not_assignable
修改后你的完整测试代码如下:
(tester) async { await tester.pumpWidget(widget); await tester.tap(find.widgetWithText(TextButton, 'Join with us')); await tester.pumpAndSettle(); verify(mockObserver.didPush(any<Route>(), any<Route?>())); });
内容的提问来源于stack exchange,提问作者Ethan Thai
相关产品推荐
相关产品推荐

