Dart中Mockito模拟接口方法返回值出现类型不匹配错误排查
问题原因排查
1. 返回值类型不匹配(核心原因)
你的repository.getConcreteNumberTrivia方法返回类型是Future<Result<NumberTriviaEntity, Failure>>,但你在thenAnswer里直接返回了NumberTriviaEntity实例,没有用Oxidized的Result.success()包装,导致类型完全不兼容。Mockito无法自动将原始实体转换为Result类型,最终触发类型转换错误。
正确写法应该是:
when(repository.getConcreteNumberTrivia(number)) .thenAnswer((_) async => Result.success(entity));
2. Mock对象初始化异常
如果你的repository是Mockito生成的Mock类,要确保已经正确实例化,且没有空值问题。比如:
late MockNumberTriviaRepository repository; late ConcreteNumberUseCase useCase; setUp(() { repository = MockNumberTriviaRepository(); useCase = ConcreteNumberUseCase(repository); });
若Mock对象未正确初始化,调用方法时会返回默认的null值,触发类型错误。
3. 参数匹配失效
如果number参数的匹配方式不对,Mockito无法正确拦截方法调用,会执行默认mock逻辑返回null。确保参数匹配准确:
- 精确匹配:直接传入测试用的具体数值;
- 任意匹配:使用Mockito的
any(需正确导入):
when(repository.getConcreteNumberTrivia(any)) .thenAnswer((_) async => Result.success(entity));
4. 方法签名不一致
检查NumberTriviaIntf接口与Mock类中getConcreteNumberTrivia的方法签名,确保参数类型、返回类型完全一致。如果接口方法返回Future<Result<...>>,而Mock类中误写为其他类型,也会导致此错误。
内容的提问来源于stack exchange,提问作者Ουιλιαμ Αρκευα
相关产品推荐
相关产品推荐

